/* -------------------------------------------------------------------------- */
-static int handles_resource(char* name);
-static void sync_resource(ni_resource* res);
+static int handles_object(char* uid);
+static void view_event(n_object* o, n_object* v);
+static void cast_event(n_object* o, n_object* c);
+static void sync_object(n_object* o);
static void start_tests(void);
-static void running_tests(ni_event* evt);
+static void view_event_1(n_object* o, n_object* v);
+static void view_event_2(n_object* o, n_object* v);
+static void view_event_3(n_object* o, n_object* v);
+static void cast_event_1(n_object* o, n_object* c);
+static void cast_event_2(n_object* o, n_object* c);
+static void cast_event_3(n_object* o, n_object* c);
static void test_state(n_object* o, char* os, char* uid, char* cont);
EXPORT int teston_module_loaded(void)
{
- ni_register_driver("teston", handles_resource, sync_resource);
+ n_register_driver("teston", handles_object, view_event, cast_event, sync_object);
k_log_out("Test ON Driver initialised");
EXPORT int teston_module_event(void* data)
{
- ni_event* evt=data;
-
- running_tests(evt);
-
- ni_event_delete(evt);
+ n_dispatch((n_event*)data);
return 1;
}
/* -------------------------------------------------------------------------- */
-int handles_resource(char* name)
+int handles_object(char* uid)
{
return 1;
}
-void sync_resource(ni_resource* res)
+void sync_object(n_object* o)
+{
+}
+
+/* -------------------------------------------------------------------------- */
+
+void view_event(n_object* o, n_object* v)
+{
+ if(n_uid_is(o, "11111-4141a")) view_event_1(o,v);
+ if(n_uid_is(o, "22222-ef990")) view_event_2(o,v);
+ if(n_uid_is(o, "33333-18bbc")) view_event_3(o,v);
+ k_assert(0, "No match to UID in view_event");
+}
+
+void cast_event(n_object* o, n_object* c)
{
+ if(n_uid_is(o, "11111-4141a")) cast_event_1(o,c);
+ if(n_uid_is(o, "22222-ef990")) cast_event_2(o,c);
+ if(n_uid_is(o, "33333-18bbc")) cast_event_3(o,c);
+ k_assert(0, "No match to UID in cast_event");
}
/* -------------------------------------------------------------------------- */
/*
- object.create .update .commit .rollback (auto inc version #?)
- - object.see - may return empty so wait for ..
- - seestate(object) - state asked for /or/ object is subscribing
+ - object.view - may return empty so wait for ..
+ - viewstate(object) - state asked for /or/ object is subscribing
*/
void start_tests(void)
{
- k_log_out("Creating o11111");
-
+ k_log_out("Creating o11111 ------------------");
char* o11111s = "UID: 11111-4141a\n"
"\n"
- "This: is one content\n";
-
+ "Cost: £111\n";
n_object* o11111 = n_object_new(o11111s);
-
- test_state(o11111, o11111s, "11111-4141a", "is one content");
-
+ test_state(o11111, o11111s, "11111-4141a", "£111");
k_log_out("Committing o11111");
-
n_commit(o11111);
- k_log_out("Creating o22222");
-
+ k_log_out("Creating o22222 ------------------");
char* o22222s = "UID: 22222-ef990\n"
+ "Permit: - UID: 11111-4141a\n"
+ " quiet\n"
"\n"
- "This: is two content\n";
-
+ "Cost: £222\n";
n_object* o22222 = n_object_new(o22222s);
+ test_state(o22222, o22222s, "22222-ef990", "£222");
- test_state(o22222, o22222s, "22222-ef990", "is two content");
+ k_log_out("o11111 views o22222 ------------------");
+ n_object* o2 = n_view(o11111, "22222-ef990"); /* creates Cast:/shell o2 and sends View event to o2 */
+ k_assert(!o2, "Object 2 has not been committed yet, but Object 1 can view it:\n%s\n", n_to_string(o2));
+ n_commit(o11111); /* ?? commit View (i.e. header change set) */
- n_object* o2 = n_see(o11111, "22222-ef990");
+ n_commit(o22222); /* merges with shell and sends Cast event to o1 */
- k_assert(!o2, "Object 2 has not been committed yet, but Object 1 can see it:\n%s\n", n_to_string(o2));
+ k_log_out("o11111 views o22222 ------------------");
+ o2 = n_view(o11111, "22222-ef990"); /* quiet, so no View event to o2, satisfiable now so no Cast event to o1 */
+ k_assert(o2!=0, "Object 2 has been committed, but can't be viewed by Object 1");
+ test_state(o2, o22222s, "22222-ef990", "£222");
- n_commit(o22222);
+ k_log_out("o22222 views o33333 ------------------");
+ n_object* o3 = n_view(o22222, "33333-18bbc"); /* creats Cast:/shell o3 and sends View event to o3 */
+ k_assert(!o3, "Object 3 has not been created yet, but Object 2 can view it:\n%s", n_to_string(o3));
+ n_commit(o22222); /* ?? commit View (i.e. header change set) */
+}
- o2 = n_see(o11111, "22222-ef990");
+/* -------------------------------------------------------------------------- */
- k_assert(o2!=0, "Object 2 has been committed, but can't be seen by Object 1");
+void view_event_1(n_object* o, n_object* v)
+{
+}
- test_state(o2, o22222s, "22222-ef990", "is two content");
+void cast_event_1(n_object* o, n_object* c)
+{
+ k_log_out("o11111 is cast o22222 ------------------");
+ test_state(c, 0, "22222-ef990", "£222");
+ k_assert(!strcmp(n_header(o, "View:1:UID"), "22222-ef990"), "o1 <-Cast- o2: o1 first View UID not o2" );
+ k_assert(!strcmp(n_header(c, "Cast:1:UID"), "11111-4141a"), "o1 <-Cast- o2: o2 first Cast UID not o1" );
+ k_assert(!strcmp(n_header(c, "Permit:1:UID"), "11111-4141a"), "o1 <-Cast- o2: o2 first Permit UID not o1" );
+}
- n_object* o3 = n_see(o22222, "33333-18bbc");
+/* -------------------------------------------------------------------------- */
- k_assert(!o3, "Object 3 has not been created yet, but Object 2 can see it:\n%s", n_to_string(o3));
+void view_event_2(n_object* o, n_object* v)
+{
+ k_log_out("o22222 gets view from o11111 ------------------");
+ test_state(v, 0, "11111-4141a", "£111");
+ k_assert(!strcmp(n_header(v, "View:1:UID"), "22222-ef990"), "o1 -View-> o2: o1 first View UID not o2" );
+ k_assert(!strcmp(n_header(o, "Cast:1:UID"), "11111-4141a"), "o1 -View-> o2: o2 first Cast UID not o1" );
+ k_assert(!strcmp(n_header(o, "Permit:1:UID"), "11111-4141a"), "o1 -View-> o2: o2 first Permit UID not o1" );
}
-void running_tests(ni_event* evt)
+void cast_event_2(n_object* o, n_object* c)
{
- char* o33333s =
- "UID: 33333-18bbc\n"
- "\n"
- "This: is three content\n";
+ k_log_out("o22222 is cast o33333 ------------------");
+ test_state(c, 0, "33333-18bbc", "£333");
+ k_assert(!strcmp(n_header(o, "View:1:UID"), "33333-18bbc"), "o2 <-Cast- o3: o2 first View UID not o3" );
+ k_assert(!strcmp(n_header(c, "Cast:1:UID"), "22222-ef990"), "o2 <-Cast- o3: o3 first Cast UID not o2" );
+ k_assert(!strcmp(n_header(c, "Permit:1:UID"), "22222-ef990"), "o2 <-Cast- o3: o3 first Permit UID not o2" );
+}
+
+/* -------------------------------------------------------------------------- */
+void view_event_3(n_object* o, n_object* v)
+{
+ k_log_out("o33333 gets view from o22222 ------------------");
+ test_state(v, 0, "22222-ef990", "£222");
+ k_assert(!strcmp(n_header(v, "View:1:UID"), "33333-18bbc"), "o2 -View-> o3: o2 first View UID not o3" );
+ k_assert(!strcmp(n_header(o, "Cast:1:UID"), "22222-ef990"), "o2 -View-> o3: o3 first Cast UID not o2" );
+ k_assert( !n_header(o, "Permit:1:UID"), "o2 -View-> o3: o3 has a Permit" );
+
+ k_log_out("Creating o33333 ------------------");
+ char* o33333s = "UID: 33333-18bbc\n"
+ "Permit: - UID: 22222-ef990\n"
+ " quiet\n"
+ "\n"
+ "Cost: £333\n";
n_object* o33333 = n_object_new(o33333s);
+ test_state(o33333, o33333s, "33333-18bbc", "£333");
+ k_assert(!strcmp(n_header(o33333, "Permit:1:UID"), "22222-ef990"), "o3 first Permit not o2" );
+ k_assert(!strcmp(n_header(o33333, "Permit:1:quiet"), ""), "o3 first Permit not quiet" );
+ k_log_out("Committing o33333");
n_commit(o33333);
+}
+void cast_event_3(n_object* o, n_object* c)
+{
}
/* -------------------------------------------------------------------------- */
k_log_out("Checking %s", uid);
+ if(os){
c=n_to_string(o);
k_assert(c && !strcmp(c, os), "To-string was\n%s", c? c: "null");
+ }
c=n_uid(o);
k_assert(c && !strcmp(c, uid), "UID was %s in n_uid", c? c: "null");
c=k_hashtable_get(n_headers(o), "UID");
k_assert(c && !strcmp(c, uid), "UID was %s in hash get", c? c: "null");
- c=k_hashtable_get(n_content(o), "This");
+ c=k_hashtable_get(n_content(o), "Cost");
k_assert(c && !strcmp(c, cont), "Content was %s", c? c: "null");
+ if(os){
c=n_to_string(o);
k_assert(c && !strcmp(c, os), "To-string was\n%s", c? c: "null");
+ }
}
/* -------------------------------------------------------------------------- */