more test and api stuff
[cilux] / src / drivers / ot / test / teston.c
1
2 /* -------------------------------------------------------------------------- */
3
4 #include <kernelapi.h>
5 #include <notification.h>
6
7 /* -------------------------------------------------------------------------- */
8
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);
13
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);
21
22 static void test_state(n_object* o, char* os, char* uid, char* cont);
23
24 /* -------------------------------------------------------------------------- */
25
26 EXPORT int teston_module_loaded(void)
27 {
28     n_register_driver("teston", handles_object, view_event, cast_event, sync_object);
29
30     k_log_out("Test ON Driver initialised");
31
32     start_tests();
33
34     return 1;
35 }
36
37 EXPORT int teston_module_event(void* data)
38 {
39     n_dispatch((n_event*)data);
40     return 1;
41 }
42
43 EXPORT int teston_module_tick(void)
44 {
45     return 1;
46 }
47
48 /* -------------------------------------------------------------------------- */
49
50 int handles_object(char* uid)
51 {
52     return 1;
53 }
54
55 void sync_object(n_object* o)
56 {
57 }
58
59 /* -------------------------------------------------------------------------- */
60
61 void view_event(n_object* o, n_object* v)
62 {
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");
67 }
68
69 void cast_event(n_object* o, n_object* c)
70 {
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");
75 }
76
77 /* -------------------------------------------------------------------------- */
78
79 /*
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
83  */
84 void start_tests(void)
85 {
86     k_log_out("Creating o11111 ------------------");
87
88     char* o11111s = "UID: 11111-4141a\n"
89                     "\n"
90                     "This: is one content\n";
91
92     n_object* o11111 = n_object_new(o11111s);
93
94     test_state(o11111, o11111s, "11111-4141a", "is one content");
95
96     k_log_out("Committing o11111");
97
98     n_commit(o11111);
99
100     k_log_out("Creating o22222 ------------------");
101
102     char* o22222s = "UID: 22222-ef990\n"
103                     "\n"
104                     "This: is two content\n";
105
106     n_object* o22222 = n_object_new(o22222s);
107
108     test_state(o22222, o22222s, "22222-ef990", "is two content");
109
110     k_log_out("o11111 views o22222 ------------------");
111
112     n_object* o2 = n_view(o11111, "22222-ef990");
113
114     k_assert(!o2, "Object 2 has not been committed yet, but Object 1 can view it:\n%s\n", n_to_string(o2));
115
116     n_commit(o22222);
117
118     o2 = n_view(o11111, "22222-ef990");
119
120     k_assert(o2!=0, "Object 2 has been committed, but can't be viewed by Object 1");
121
122     test_state(o2, o22222s, "22222-ef990", "is two content");
123
124     k_log_out("o22222 views o33333 ------------------");
125
126     n_object* o3 = n_view(o22222, "33333-18bbc");
127
128     k_assert(!o3, "Object 3 has not been created yet, but Object 2 can view it:\n%s", n_to_string(o3));
129 }
130
131 /* -------------------------------------------------------------------------- */
132
133 void view_event_1(n_object* o, n_object* v)
134 {
135 }
136
137 /* 2 -> 1 */
138 void cast_event_1(n_object* o, n_object* c)
139 {
140 }
141
142 /* -------------------------------------------------------------------------- */
143
144 /* 1 -> 2 []; 1 -> 2 [*] */
145 void view_event_2(n_object* o, n_object* v)
146 {
147 }
148
149 /* 3 -> 2 */
150 void cast_event_2(n_object* o, n_object* c)
151 {
152 }
153
154 /* -------------------------------------------------------------------------- */
155
156 /* 2 -> 3 [] */
157 void view_event_3(n_object* o, n_object* v)
158 {
159     char* o33333s = 
160             "UID: 33333-18bbc\n"
161             "\n"
162             "This: is three content\n";
163
164     n_object* o33333 = n_object_new(o33333s);
165
166     n_commit(o33333);
167 }
168
169 void cast_event_3(n_object* o, n_object* c)
170 {
171 }
172
173 /* -------------------------------------------------------------------------- */
174
175 void test_state(n_object* o, char* os, char* uid, char* cont)
176 {
177     char* c;
178
179     k_log_out("Checking %s", uid);
180
181     c=n_to_string(o);
182     k_assert(c && !strcmp(c, os), "To-string was\n%s", c? c: "null");
183
184     c=n_uid(o);
185     k_assert(c && !strcmp(c, uid), "UID was %s in n_uid",  c? c: "null");
186
187     c=n_header(o, "UID");
188     k_assert(c && !strcmp(c, uid), "UID was %s in n_header",  c? c: "null");
189
190     c=k_hashtable_get(n_headers(o), "UID");
191     k_assert(c && !strcmp(c, uid), "UID was %s in hash get",  c? c: "null");
192
193     c=k_hashtable_get(n_content(o), "This");
194     k_assert(c && !strcmp(c, cont), "Content was %s", c? c: "null");
195
196     c=n_to_string(o);
197     k_assert(c && !strcmp(c, os), "To-string was\n%s", c? c: "null");
198 }
199
200 /* -------------------------------------------------------------------------- */
201
202
203