From 2e76e0b2a4da2fbe22141e8960041d4c92cf1f7d Mon Sep 17 00:00:00 2001
From: Clark Wood <clark.w.wood@gmail.com>
Date: Fri, 30 May 2014 16:24:34 -0400
Subject: [PATCH] added some unit tests for src/or/cpuworker.c

---
 src/test/include.am       |  1 +
 src/test/test.c           |  2 ++
 src/test/test_cpuworker.c | 78 +++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 81 insertions(+)
 create mode 100644 src/test/test_cpuworker.c

diff --git a/src/test/include.am b/src/test/include.am
index fba439a..bccd787 100644
--- a/src/test/include.am
+++ b/src/test/include.am
@@ -45,6 +45,7 @@ src_test_test_SOURCES = \
 	src/test/test_nodelist.c \
 	src/test/test_policy.c \
 	src/test/test_status.c \
+	src/test/test_cpuworker.c \
 	src/ext/tinytest.c
 
 src_test_test_CFLAGS = $(AM_CFLAGS) $(TEST_CFLAGS)
diff --git a/src/test/test.c b/src/test/test.c
index 8bce9c9..63b43ff 100644
--- a/src/test/test.c
+++ b/src/test/test.c
@@ -1315,6 +1315,7 @@ extern struct testcase_t routerkeys_tests[];
 extern struct testcase_t oom_tests[];
 extern struct testcase_t policy_tests[];
 extern struct testcase_t status_tests[];
+extern struct testcase_t cpuworker_tests[];
 
 static struct testgroup_t testgroups[] = {
   { "", test_array },
@@ -1345,6 +1346,7 @@ static struct testgroup_t testgroups[] = {
   { "oom/", oom_tests },
   { "policy/" , policy_tests },
   { "status/" , status_tests },
+  { "cpuworker/" , cpuworker_tests },
   END_OF_GROUPS
 };
 
diff --git a/src/test/test_cpuworker.c b/src/test/test_cpuworker.c
new file mode 100644
index 0000000..4260d33
--- /dev/null
+++ b/src/test/test_cpuworker.c
@@ -0,0 +1,78 @@
+/* Copyright (c) 2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#include "or.h"
+#include "onion.h"
+#include "test.h"
+#include "util.h"
+#include "channel.h"
+#include "circuitlist.h"
+#include "connection.h"
+#include "cpuworker.h"
+
+static void
+test_connection_cpu_finished_flushing(void *arg)
+{
+  int r;
+  connection_t *conn;
+
+  conn = connection_new(CONN_TYPE_CPUWORKER, AF_UNIX);
+  r = connection_cpu_finished_flushing(conn);
+  tor_assert(r == 0);
+}
+
+static void
+test_connection_cpu_process_inbuf(void *arg)
+{
+  int r;
+  connection_t *conn;
+
+  /* Initialization borrowed from spawn_cpuworker(void) in cpuworker.c */
+  conn = connection_new(CONN_TYPE_CPUWORKER, AF_UNIX);
+  r = connection_cpu_process_inbuf(conn);
+  tor_assert(r == 0);
+}
+
+static void
+test_assign_onionskin_to_cpuworker(void *arg)
+{
+  int r;
+  or_circuit_t *circ;
+  create_cell_t *create_cell;
+  //create_cell_t *onionskin = NULL;
+  //connection_t *cpuworker;
+
+  //channel_t *chan;
+
+  /* Exercise failing circ->p_chan */
+  circ = or_circuit_new(0, NULL);
+  circ->base_.purpose = CIRCUIT_PURPOSE_OR;
+  circuit_set_state(TO_CIRCUIT(circ), CIRCUIT_STATE_ONIONSKIN_PENDING);
+  create_cell = tor_malloc_zero(sizeof(create_cell_t));
+  r = assign_onionskin_to_cpuworker(NULL, circ, create_cell);
+
+  // fix: raises a warning
+  tor_assert(r == -1);
+
+  //cpuworker = connection_new(CONN_TYPE_CPUWORKER, AF_UNIX);
+  //circ = onion_next_task(&onionskin);
+  //r = assign_onionskin_to_cpuworker(cpuworker, circ, onionskin);
+  //tor_assert(r == 0);
+
+  // TODO make it so circ->p_chan is NOT NULL
+  /* Exercise success */
+  //channel_init(chan);
+  //r = assign_onionskin_to_cpuworker(NULL, circ, create_cell);
+  //tor_assert(r == 0);
+}
+
+struct testcase_t cpuworker_tests[] = {
+  { "connection_cpu_finished_flushing", test_connection_cpu_finished_flushing,
+                                        0, NULL, NULL },
+  { "connection_cpu_process_inbuf", test_connection_cpu_process_inbuf,
+                                        0, NULL, NULL },
+  { "assign_onionskin_to_cpuworker", test_assign_onionskin_to_cpuworker,
+                                        0, NULL, NULL },
+  END_OF_TESTCASES
+};
+
-- 
1.9.1

