2 /* -------------------------------------------------------------------------- */
5 #include <notification.h>
7 /* -------------------------------------------------------------------------- */
9 static int handles_object(char* uid);
10 static void view_event(n_object* o, n_object* v);
11 static void cast_event(n_object* o, n_object* c);
12 static void sync_object(n_object* o);
14 static void start_tests(void);
15 static void view_event_1(n_object* o, n_object* v);
16 static void view_event_2(n_object* o, n_object* v);
17 static void view_event_3(n_object* o, n_object* v);
18 static void cast_event_1(n_object* o, n_object* c);
19 static void cast_event_2(n_object* o, n_object* c);
20 static void cast_event_3(n_object* o, n_object* c);
22 static void test_state(n_object* o, char* os, char* uid, char* cont);
24 /* -------------------------------------------------------------------------- */
26 EXPORT int teston_module_loaded(void)
28 n_register_driver("teston", handles_object, view_event, cast_event, sync_object);
30 k_log_out("Test ON Driver initialised");
37 EXPORT int teston_module_event(void* data)
39 n_dispatch((n_event*)data);
43 EXPORT int teston_module_tick(void)
48 /* -------------------------------------------------------------------------- */
50 int handles_object(char* uid)
55 void sync_object(n_object* o)
59 /* -------------------------------------------------------------------------- */
61 void view_event(n_object* o, n_object* v)
63 if(n_uid_is(o, "11111-4141a")) view_event_1(o,v);
64 if(n_uid_is(o, "22222-ef990")) view_event_2(o,v);
65 if(n_uid_is(o, "33333-18bbc")) view_event_3(o,v);
66 k_assert(0, "No match to UID in view_event");
69 void cast_event(n_object* o, n_object* c)
71 if(n_uid_is(o, "11111-4141a")) cast_event_1(o,c);
72 if(n_uid_is(o, "22222-ef990")) cast_event_2(o,c);
73 if(n_uid_is(o, "33333-18bbc")) cast_event_3(o,c);
74 k_assert(0, "No match to UID in cast_event");
77 /* -------------------------------------------------------------------------- */
80 - object.create .update .commit .rollback (auto inc version #?)
81 - object.view - may return empty so wait for ..
82 - viewstate(object) - state asked for /or/ object is subscribing
84 void start_tests(void)
86 k_log_out("Creating o1 ------------------");
87 char* o11111s = "UID: 11111-4141a\n"
90 n_object* o11111 = n_object_new(o11111s);
91 test_state(o11111, o11111s, "11111-4141a", "£111");
92 k_log_out("Committing o1");
95 k_log_out("Creating o2 ------------------");
96 char* o22222s = "UID: 22222-ef990\n"
97 "Open: - UID: 11111-4141a\n"
101 n_object* o22222 = n_object_new(o22222s);
102 test_state(o22222, o22222s, "22222-ef990", "£222");
104 k_log_out("o1 views o2 ------------------");
105 n_object* o2 = n_view(o11111, "22222-ef990"); /* creates Cast:/shell o2 and sends View event to o2 */
106 k_assert(!o2, "Object 2 has not been committed yet, but Object 1 can view it:\n%s\n", n_to_string(o2));
107 n_commit(o11111); /* ?? commit View (i.e. header change set) */
109 n_commit(o22222); /* merges with shell and sends Cast event to o1 */
111 k_log_out("o1 views o2 ------------------");
112 o2 = n_view(o11111, "22222-ef990"); /* quiet, so no View event to o2, satisfiable now so no Cast event to o1 */
113 k_assert(o2!=0, "Object 2 has been committed, but can't be viewed by Object 1");
114 test_state(o2, o22222s, "22222-ef990", "£222");
116 k_log_out("o2 views o3 ------------------");
117 n_object* o3 = n_view(o22222, "33333-18bbc"); /* creats Cast:/shell o3 and sends View event to o3 */
118 k_assert(!o3, "Object 3 has not been created yet, but Object 2 can view it:\n%s", n_to_string(o3));
119 n_commit(o22222); /* ?? commit View (i.e. header change set) */
122 /* -------------------------------------------------------------------------- */
124 void view_event_1(n_object* o, n_object* v)
128 void cast_event_1(n_object* o, n_object* c)
130 k_log_out("o1 is cast o2 ------------------");
131 test_state(c, 0, "22222-ef990", "£222");
132 k_assert(!strcmp(n_header(o, "View:1:UID"), "22222-ef990"), "o1 <-Cast- o2: o1 first View UID not o2" );
133 k_assert(!strcmp(n_header(c, "Cast:1:UID"), "11111-4141a"), "o1 <-Cast- o2: o2 first Cast UID not o1" );
134 k_assert(!strcmp(n_header(c, "Open:1:UID"), "11111-4141a"), "o1 <-Cast- o2: o2 first Open UID not o1" );
137 /* -------------------------------------------------------------------------- */
139 void view_event_2(n_object* o, n_object* v)
141 if(n_uid_is(v, "11111-4141a")){
142 k_log_out("o2 gets view from o1 ------------------");
143 test_state(v, 0, "11111-4141a", "£111");
144 k_assert(!strcmp(n_header(v, "View:1:UID"), "22222-ef990"), "o1 -View-> o2: o1 first View UID not o2" );
145 k_assert(!strcmp(n_header(o, "Cast:1:UID"), "11111-4141a"), "o1 -View-> o2: o2 first Cast UID not o1" );
146 k_assert(!strcmp(n_header(o, "Open:1:UID"), "11111-4141a"), "o1 -View-> o2: o2 first Open UID not o1" );
149 if(n_uid_is(v, "11111-4141a")){
150 k_log_out("o2 gets view from o3 ------------------");
151 test_state(v, 0, "33333-18bbc", "£333");
152 k_assert(!strcmp(n_header(v, "View:1:UID"), "22222-ef990"), "o3 -View-> o2: o3 first View UID not o2" );
153 k_assert(!strcmp(n_header(o, "Cast:2:UID"), "33333-18bbc"), "o3 -View-> o2: o2 second Cast UID not o3" );
154 k_assert( !n_header(o, "Open:2:UID"), "o3 -View-> o2: o2 has an Open" );
156 k_log_out("o2 opens to o3 ------------------");
157 n_open(o, "33333-18bbc", "quiet");
158 k_log_out("Committing o2");
160 k_assert(!strcmp(n_header(o, "Open:2:UID"), "33333-18bbc"), "o2 second Open UID not o3" );
161 k_assert(!strcmp(n_header(o, "Open:2:quiet"), ""), "o2 second Open not quiet" );
164 k_assert(0, "o2 got view but not from o1 or o3");
168 void cast_event_2(n_object* o, n_object* c)
170 k_log_out("o2 is cast o3 ------------------");
171 test_state(c, 0, "33333-18bbc", "£333");
172 k_assert(!strcmp(n_header(o, "View:1:UID"), "33333-18bbc"), "o2 <-Cast- o3: o2 first View UID not o3" );
173 k_assert(!strcmp(n_header(c, "Cast:1:UID"), "22222-ef990"), "o2 <-Cast- o3: o3 first Cast UID not o2" );
174 k_assert(!strcmp(n_header(c, "Open:1:UID"), "22222-ef990"), "o2 <-Cast- o3: o3 first Open UID not o2" );
177 /* -------------------------------------------------------------------------- */
179 void view_event_3(n_object* o, n_object* v)
181 k_log_out("o3 gets view from o2 ------------------");
182 test_state(v, 0, "22222-ef990", "£222");
183 k_assert(!strcmp(n_header(v, "View:1:UID"), "33333-18bbc"), "o2 -View-> o3: o2 first View UID not o3" );
184 k_assert(!strcmp(n_header(o, "Cast:1:UID"), "22222-ef990"), "o2 -View-> o3: o3 first Cast UID not o2" );
185 k_assert( !n_header(o, "Open:1:UID"), "o2 -View-> o3: o3 has an Open" );
187 k_log_out("Creating o3 ------------------");
188 char* o33333s = "UID: 33333-18bbc\n"
189 "Open: - UID: 22222-ef990\n"
193 n_object* o33333 = n_object_new(o33333s);
194 test_state(o33333, o33333s, "33333-18bbc", "£333");
195 k_assert(!strcmp(n_header(o33333, "Open:1:UID"), "22222-ef990"), "o3 first Open not o2" );
196 k_assert(!strcmp(n_header(o33333, "Open:1:quiet"), ""), "o3 first Open not quiet" );
198 k_log_out("Committing o3");
201 k_assert(!strcmp(n_header(o, "Cast:1:UID"), "22222-ef990"), "o3 first Cast UID not o2" );
202 k_assert(!strcmp(n_header(o, "Open:1:UID"), "22222-ef990"), "o3 first Open not o2" );
203 k_assert(!strcmp(n_header(o, "Open:1:quiet"), ""), "o3 first Open not quiet" );
205 k_log_out("o3 views o2 ------------------");
206 n_object* o2 = n_view(o, "22222-ef990");
207 k_assert(!o2, "o2 is not Open to o3, but o3 can view it:\n%s\n", n_to_string(o2));
209 k_log_out("Committing o3");
213 void cast_event_3(n_object* o, n_object* c)
215 k_log_out("o3 is cast o2 ------------------");
216 test_state(c, 0, "22222-ef990", "£222");
217 k_assert(!strcmp(n_header(o, "View:1:UID"), "22222-ef990"), "o3 <-Cast- o2: o3 first View UID not o2" );
218 k_assert(!strcmp(n_header(c, "Cast:2:UID"), "33333-18bbc"), "o3 <-Cast- o2: o2 second Cast UID not o3" );
219 k_assert(!strcmp(n_header(c, "Open:2:UID"), "33333-18bbc"), "o3 <-Cast- o2: o2 second Open UID not o3" );
222 /* -------------------------------------------------------------------------- */
224 void test_state(n_object* o, char* os, char* uid, char* cont)
228 k_log_out("Checking %s", uid);
232 k_assert(c && !strcmp(c, os), "To-string was\n%s", c? c: "null");
236 k_assert(c && !strcmp(c, uid), "UID was %s in n_uid", c? c: "null");
238 c=n_header(o, "UID");
239 k_assert(c && !strcmp(c, uid), "UID was %s in n_header", c? c: "null");
241 c=k_hashtable_get(n_headers(o), "UID");
242 k_assert(c && !strcmp(c, uid), "UID was %s in hash get", c? c: "null");
244 c=k_hashtable_get(n_content(o), "Cost");
245 k_assert(c && !strcmp(c, cont), "Content was %s", c? c: "null");
249 k_assert(c && !strcmp(c, os), "To-string was\n%s", c? c: "null");
253 /* -------------------------------------------------------------------------- */