| 
					
				 | 
			
			
				@@ -293,6 +293,104 @@ test_cntev_format_cell_stats(void *arg) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   tor_free(n_chan); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static void 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+test_cntev_event_mask(void *arg) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  unsigned int test_event, selected_event; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  (void)arg; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /* Check that nothing is interesting when no events are set */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  control_testing_set_global_event_mask(EVENT_MASK_NONE_); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /* Check that nothing is interesting between EVENT_MIN_ and EVENT_MAX_ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  for (test_event = EVENT_MIN_; test_event <= EVENT_MAX_; test_event++) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    tt_assert(!control_event_is_interesting(test_event)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /* Check that nothing is interesting outside EVENT_MIN_ to EVENT_MAX_ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   * This will break if control_event_is_interesting() checks its arguments */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  for (test_event = 0; test_event < EVENT_MIN_; test_event++) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    tt_assert(!control_event_is_interesting(test_event)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  for (test_event = EVENT_MAX_ + 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+       test_event < EVENT_CAPACITY_; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+       test_event++) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    tt_assert(!control_event_is_interesting(test_event)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /* Check that all valid events are interesting when all events are set */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  control_testing_set_global_event_mask(EVENT_MASK_ALL_); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /* Check that everything is interesting between EVENT_MIN_ and EVENT_MAX_ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  for (test_event = EVENT_MIN_; test_event <= EVENT_MAX_; test_event++) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    tt_assert(control_event_is_interesting(test_event)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /* Check that nothing is interesting outside EVENT_MIN_ to EVENT_MAX_ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   * This will break if control_event_is_interesting() checks its arguments */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  for (test_event = 0; test_event < EVENT_MIN_; test_event++) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    tt_assert(!control_event_is_interesting(test_event)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  for (test_event = EVENT_MAX_ + 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+       test_event < EVENT_CAPACITY_; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+       test_event++) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    tt_assert(!control_event_is_interesting(test_event)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /* Check that only that event is interesting when a single event is set */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  for (selected_event = EVENT_MIN_; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+       selected_event <= EVENT_MAX_; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+       selected_event++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    control_testing_set_global_event_mask(EVENT_MASK_(selected_event)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /* Check that only this event is interesting 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * between EVENT_MIN_ and EVENT_MAX_ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    for (test_event = EVENT_MIN_; test_event <= EVENT_MAX_; test_event++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if (test_event == selected_event) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        tt_assert(control_event_is_interesting(test_event)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        tt_assert(!control_event_is_interesting(test_event)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /* Check that nothing is interesting outside EVENT_MIN_ to EVENT_MAX_ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * This will break if control_event_is_interesting checks its arguments */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    for (test_event = 0; test_event < EVENT_MIN_; test_event++) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      tt_assert(!control_event_is_interesting(test_event)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    for (test_event = EVENT_MAX_ + 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         test_event < EVENT_CAPACITY_; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         test_event++) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      tt_assert(!control_event_is_interesting(test_event)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /* Check that only that event is not-interesting 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   * when a single event is un-set */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  for (selected_event = EVENT_MIN_; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+       selected_event <= EVENT_MAX_; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+       selected_event++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    control_testing_set_global_event_mask( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                          EVENT_MASK_ALL_ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                          & ~(EVENT_MASK_(selected_event)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                          ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /* Check that only this event is not-interesting 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * between EVENT_MIN_ and EVENT_MAX_ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    for (test_event = EVENT_MIN_; test_event <= EVENT_MAX_; test_event++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if (test_event == selected_event) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        tt_assert(!control_event_is_interesting(test_event)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        tt_assert(control_event_is_interesting(test_event)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /* Check that nothing is interesting outside EVENT_MIN_ to EVENT_MAX_ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * This will break if control_event_is_interesting checks its arguments */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    for (test_event = 0; test_event < EVENT_MIN_; test_event++) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      tt_assert(!control_event_is_interesting(test_event)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    for (test_event = EVENT_MAX_ + 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         test_event < EVENT_CAPACITY_; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         test_event++) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      tt_assert(!control_event_is_interesting(test_event)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ done: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #define TEST(name, flags)                                               \ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   { #name, test_cntev_ ## name, flags, 0, NULL } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -302,6 +400,7 @@ struct testcase_t controller_event_tests[] = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   TEST(sum_up_cell_stats, 0), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   TEST(append_cell_stats, 0), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   TEST(format_cell_stats, 0), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  TEST(event_mask, 0), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   END_OF_TESTCASES 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 |