trema 0.2.5 → 0.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (292) hide show
  1. data/.gitignore +1 -1
  2. data/Doxyfile +1 -1
  3. data/Gemfile +18 -6
  4. data/README.md +112 -5
  5. data/Rakefile +3 -1
  6. data/Rantfile +88 -1
  7. data/bin/trema +248 -0
  8. data/bin/trema-config +59 -0
  9. data/cruise.rb +1 -1
  10. data/features/example.dumper.feature +45 -65
  11. data/features/example.hello_trema.feature +21 -0
  12. data/features/example.learning_switch.feature +26 -28
  13. data/features/example.list_switches.feature +19 -33
  14. data/features/example.message.echo_reply.feature +10 -10
  15. data/features/example.message.echo_request.feature +2 -2
  16. data/features/example.message.features_request.feature +6 -5
  17. data/features/example.message.hello.feature +47 -13
  18. data/features/example.message.set_config.feature +4 -4
  19. data/features/example.message.vendor-action.feature +23 -0
  20. data/features/example.multi_learning_switch.feature +14 -42
  21. data/features/example.packet_in.feature +31 -0
  22. data/features/example.packetin_filter_config.feature +11 -7
  23. data/features/example.patch_panel.feature +29 -0
  24. data/features/example.repeater_hub.feature +43 -40
  25. data/features/example.switch_info.feature +51 -0
  26. data/features/example.switch_monitor.feature +24 -42
  27. data/features/packetin_filter.feature +28 -22
  28. data/features/step_definitions/misc_steps.rb +19 -8
  29. data/features/step_definitions/send_packets_steps.rb +1 -10
  30. data/features/step_definitions/stats_steps.rb +4 -4
  31. data/features/support/env.rb +2 -1
  32. data/features/support/hooks.rb +35 -2
  33. data/features/switch_manager.feature +18 -12
  34. data/features/trema-config.feature +26 -39
  35. data/features/trema.dump_flows.feature +26 -12
  36. data/features/trema.help.feature +26 -0
  37. data/features/trema.kill.feature +39 -41
  38. data/features/trema.killall.feature +23 -23
  39. data/features/trema.reset_stats.feature +50 -10
  40. data/features/trema.run.feature +28 -39
  41. data/features/trema.send_packets.feature +29 -40
  42. data/features/trema.show_stats.feature +30 -33
  43. data/features/trema.up.feature +33 -0
  44. data/features/trema.version.feature +9 -0
  45. data/ruby/extconf.rb +7 -0
  46. data/ruby/trema/aggregate-stats-reply.rb +3 -3
  47. data/ruby/trema/app.rb +5 -1
  48. data/ruby/trema/barrier-request.c +55 -30
  49. data/ruby/trema/cli.rb +8 -8
  50. data/ruby/trema/command.rb +1 -3
  51. data/ruby/trema/command/dump_flows.rb +5 -24
  52. data/ruby/trema/command/kill.rb +31 -36
  53. data/ruby/trema/command/killall.rb +1 -19
  54. data/{features/step_definitions/kill_steps.rb → ruby/trema/command/netns.rb} +13 -5
  55. data/ruby/trema/command/reset_stats.rb +3 -23
  56. data/ruby/trema/command/ruby.rb +2 -19
  57. data/ruby/trema/command/run.rb +6 -27
  58. data/ruby/trema/command/send_packets.rb +6 -90
  59. data/ruby/trema/command/show_stats.rb +21 -40
  60. data/ruby/trema/command/up.rb +5 -26
  61. data/ruby/trema/command/version.rb +1 -5
  62. data/ruby/trema/controller.c +14 -16
  63. data/ruby/trema/custom-switch.rb +56 -0
  64. data/ruby/trema/desc-stats-reply.rb +5 -5
  65. data/ruby/trema/dsl/configuration.rb +4 -0
  66. data/{features/step_definitions/up_steps.rb → ruby/trema/dsl/custom-switch.rb} +18 -4
  67. data/ruby/trema/dsl/netns.rb +78 -0
  68. data/ruby/trema/dsl/parser.rb +2 -0
  69. data/ruby/trema/dsl/runner.rb +8 -0
  70. data/ruby/trema/dsl/syntax.rb +18 -0
  71. data/ruby/trema/echo-reply.h +2 -2
  72. data/ruby/trema/echo-request.c +3 -5
  73. data/ruby/trema/enqueue.rb +2 -2
  74. data/ruby/trema/error.c +3 -3
  75. data/ruby/trema/executables.rb +26 -2
  76. data/ruby/trema/features-request.c +3 -5
  77. data/ruby/trema/flow-removed.c +6 -6
  78. data/ruby/trema/flow-stats-reply.rb +6 -8
  79. data/ruby/trema/flow.rb +12 -1
  80. data/ruby/trema/get-config-request.c +55 -28
  81. data/ruby/trema/hello.c +3 -5
  82. data/ruby/trema/host.rb +8 -0
  83. data/ruby/trema/list-switches-reply.c +1 -1
  84. data/ruby/trema/mac.rb +1 -1
  85. data/ruby/trema/match.c +15 -14
  86. data/ruby/trema/monkey-patch/module/deprecation.rb +0 -2
  87. data/ruby/trema/netns.rb +127 -0
  88. data/ruby/trema/ordered-hash.rb +5 -4
  89. data/ruby/trema/packet-in.c +136 -113
  90. data/ruby/trema/packet-queue.rb +9 -9
  91. data/ruby/trema/packetin-filter.rb +1 -1
  92. data/ruby/trema/phost.rb +16 -7
  93. data/ruby/trema/port-mod.c +6 -5
  94. data/ruby/trema/port-stats-reply.rb +2 -2
  95. data/ruby/trema/process.rb +29 -0
  96. data/ruby/trema/queue-stats-reply.rb +2 -4
  97. data/ruby/trema/send-out-port.rb +5 -3
  98. data/ruby/trema/set-eth-addr.rb +4 -0
  99. data/ruby/trema/set-ip-addr.rb +4 -2
  100. data/ruby/trema/set-ip-dst-addr.rb +2 -1
  101. data/ruby/trema/set-ip-src-addr.rb +2 -1
  102. data/ruby/trema/set-ip-tos.rb +3 -2
  103. data/ruby/trema/set-transport-port.rb +3 -2
  104. data/ruby/trema/set-vlan-priority.rb +3 -2
  105. data/ruby/trema/set-vlan-vid.rb +5 -4
  106. data/ruby/trema/shell/reset_stats.rb +2 -1
  107. data/ruby/trema/shell/run.rb +1 -1
  108. data/ruby/trema/shell/send_packets.rb +1 -1
  109. data/ruby/trema/shell/show_stats.rb +1 -1
  110. data/ruby/trema/stats-helper.rb +3 -3
  111. data/ruby/trema/stats-reply.c +26 -17
  112. data/ruby/trema/stats-request.c +39 -41
  113. data/ruby/trema/switch-daemon.rb +36 -31
  114. data/ruby/trema/switch.c +1 -1
  115. data/ruby/trema/table-stats-reply.rb +1 -1
  116. data/ruby/trema/timers.rb +13 -13
  117. data/ruby/trema/trema.c +3 -3
  118. data/ruby/trema/tremashark.rb +9 -2
  119. data/ruby/trema/util.rb +39 -15
  120. data/ruby/trema/vendor-action.rb +8 -3
  121. data/ruby/trema/vendor-stats-reply.rb +4 -6
  122. data/ruby/trema/vendor.c +1 -1
  123. data/ruby/trema/version.rb +1 -1
  124. data/spec/trema/barrier-request_spec.rb +47 -37
  125. data/spec/trema/controller_spec.rb +1 -0
  126. data/spec/trema/dsl/runner_spec.rb +8 -3
  127. data/spec/trema/dsl/vhost_spec.rb +8 -8
  128. data/spec/trema/echo-request_spec.rb +1 -0
  129. data/spec/trema/features-request_spec.rb +1 -0
  130. data/spec/trema/flow-removed_spec.rb +9 -9
  131. data/spec/trema/get-config-request_spec.rb +51 -39
  132. data/spec/trema/match_spec.rb +1 -1
  133. data/spec/trema/openflow-error_spec.rb +11 -11
  134. data/spec/trema/packet-out_spec.rb +5 -5
  135. data/spec/trema/queue-get-config-reply_spec.rb +1 -1
  136. data/spec/trema/queue-get-config-request_spec.rb +1 -1
  137. data/spec/trema/set-eth-dst-addr_spec.rb +1 -1
  138. data/spec/trema/set-eth-src-addr_spec.rb +1 -1
  139. data/spec/trema/set-ip-dst-addr_spec.rb +1 -0
  140. data/spec/trema/set-ip-src-addr_spec.rb +1 -0
  141. data/spec/trema/set-ip-tos_spec.rb +1 -0
  142. data/spec/trema/set-transport-dst-port_spec.rb +1 -0
  143. data/spec/trema/set-transport-src-port_spec.rb +1 -0
  144. data/spec/trema/set-vlan-priority_spec.rb +1 -0
  145. data/spec/trema/set-vlan-vid_spec.rb +2 -1
  146. data/spec/trema/stats-reply_spec.rb +38 -36
  147. data/spec/trema/stats-request_spec.rb +6 -6
  148. data/spec/trema/strip-vlan-header_spec.rb +1 -0
  149. data/spec/trema/util_spec.rb +3 -2
  150. data/spec/trema/vendor-action_spec.rb +9 -8
  151. data/src/examples/dumper/dumper.c +8 -6
  152. data/src/examples/dumper/dumper.rb +1 -1
  153. data/{features/step_definitions/killall_steps.rb → src/examples/hello_trema/hello-trema.rb} +6 -5
  154. data/src/examples/hello_trema/hello_trema.c +4 -4
  155. data/src/examples/learning_switch/learning_switch.c +1 -1
  156. data/src/examples/list_switches/list_switches.c +2 -2
  157. data/src/examples/match_compare/match-compare.rb +2 -2
  158. data/src/examples/multi_learning_switch/multi-learning-switch.rb +1 -1
  159. data/src/examples/multi_learning_switch/multi_learning_switch.c +3 -3
  160. data/src/examples/openflow_message/README +1 -1
  161. data/src/examples/openflow_message/echo-request.rb +1 -1
  162. data/src/examples/openflow_message/features_request.c +21 -21
  163. data/src/examples/openflow_message/hello.c +1 -3
  164. data/src/examples/openflow_message/hello.rb +9 -24
  165. data/src/examples/{hello_trema/hello_trema.rb → openflow_message/vendor-action.rb} +17 -7
  166. data/src/examples/openflow_message/vendor_action.c +105 -0
  167. data/src/examples/openflow_switch/hello_switch.c +81 -0
  168. data/src/examples/packet_in/packet-in.rb +9 -13
  169. data/src/examples/packetin_filter_config/packetin_filter_config.c +2 -2
  170. data/src/examples/patch_panel/network.conf +14 -0
  171. data/src/examples/patch_panel/patch-panel.conf +1 -0
  172. data/{features/step_definitions/show_stats_steps.rb → src/examples/patch_panel/patch-panel.rb} +29 -13
  173. data/src/examples/switch_info/{switch_info.rb → switch-info.rb} +2 -2
  174. data/src/examples/switch_info/switch_info.c +4 -4
  175. data/src/examples/switch_monitor/switch_monitor.c +3 -3
  176. data/src/examples/traffic_monitor/counter.c +9 -9
  177. data/src/examples/traffic_monitor/fdb.c +9 -9
  178. data/src/lib/arp.h +1 -1
  179. data/src/lib/buffer.c +4 -3
  180. data/src/lib/byteorder.c +31 -5
  181. data/src/lib/byteorder.h +2 -2
  182. data/src/lib/chibach.c +8 -6
  183. data/src/lib/daemon.c +29 -3
  184. data/src/lib/doubly_linked_list.c +6 -1
  185. data/src/lib/ether.c +1 -1
  186. data/src/lib/ether.h +1 -1
  187. data/src/lib/event_handler.c +3 -3
  188. data/src/lib/hash_table.c +1 -1
  189. data/src/lib/linked_list.c +50 -2
  190. data/src/lib/linked_list.h +2 -2
  191. data/src/lib/log.c +122 -22
  192. data/src/lib/log.h +13 -9
  193. data/src/lib/management_interface.c +361 -0
  194. data/src/lib/management_interface.h +42 -0
  195. data/src/lib/management_service_interface.c +104 -0
  196. data/src/lib/management_service_interface.h +136 -0
  197. data/src/lib/match_table.c +5 -5
  198. data/src/lib/message_queue.c +5 -3
  199. data/src/lib/message_queue.h +1 -1
  200. data/src/lib/messenger.c +73 -39
  201. data/src/lib/messenger.h +3 -2
  202. data/src/lib/openflow_application_interface.c +17 -17
  203. data/src/lib/openflow_message.c +175 -23
  204. data/src/lib/openflow_message.h +2 -1
  205. data/src/lib/openflow_switch_interface.c +12 -12
  206. data/src/lib/packet_parser.c +11 -32
  207. data/src/lib/packetin_filter_interface.c +5 -5
  208. data/src/lib/persistent_storage.c +7 -7
  209. data/src/lib/secure_channel.c +6 -6
  210. data/src/lib/secure_channel.h +1 -1
  211. data/src/lib/stat.c +54 -17
  212. data/src/lib/stat.h +9 -0
  213. data/src/lib/timer.c +11 -10
  214. data/src/lib/trema.c +38 -9
  215. data/src/lib/trema.h +1 -0
  216. data/src/lib/trema_private.h +6 -0
  217. data/src/lib/trema_wrapper.c +4 -4
  218. data/src/lib/trema_wrapper.h +10 -10
  219. data/src/lib/utility.c +6 -6
  220. data/src/management/application.c +224 -0
  221. data/src/management/echo.c +185 -0
  222. data/src/management/set_logging_level.c +153 -0
  223. data/src/management/show_stats.c +150 -0
  224. data/src/management/trema_manager +184 -0
  225. data/src/packetin_filter/packetin_filter.c +31 -29
  226. data/src/switch_manager/cookie_table.c +7 -7
  227. data/src/switch_manager/dpid_table.c +3 -3
  228. data/src/switch_manager/dpid_table.h +0 -1
  229. data/src/switch_manager/management_interface.h +0 -1
  230. data/src/switch_manager/ofpmsg_recv.c +3 -3
  231. data/src/switch_manager/ofpmsg_recv.h +0 -1
  232. data/src/switch_manager/ofpmsg_send.c +2 -2
  233. data/src/switch_manager/ofpmsg_send.h +0 -1
  234. data/src/switch_manager/secure_channel_listener.c +2 -2
  235. data/src/switch_manager/secure_channel_receiver.c +2 -2
  236. data/src/switch_manager/secure_channel_receiver.h +0 -1
  237. data/src/switch_manager/secure_channel_sender.c +8 -1
  238. data/src/switch_manager/service_interface.c +5 -4
  239. data/src/switch_manager/switch.c +79 -53
  240. data/src/switch_manager/switch_manager.c +24 -22
  241. data/src/switch_manager/xid_table.c +6 -6
  242. data/src/switch_manager/xid_table.h +0 -1
  243. data/src/tremashark/README +4 -3
  244. data/src/tremashark/packet_capture.c +11 -9
  245. data/src/tremashark/pcap_queue.c +2 -2
  246. data/src/tremashark/pcap_queue.h +2 -2
  247. data/src/tremashark/plugin/packet-trema/Makefile +1 -1
  248. data/src/tremashark/plugin/packet-trema/Makefile.common +1 -1
  249. data/src/tremashark/plugin/packet-trema/packet-trema.c +50 -37
  250. data/src/tremashark/queue.c +5 -4
  251. data/src/tremashark/queue.h +1 -1
  252. data/src/tremashark/stdin_relay.c +10 -8
  253. data/src/tremashark/syslog_relay.c +14 -12
  254. data/src/tremashark/tremashark.c +15 -18
  255. data/trema +2 -96
  256. data/trema-config +2 -52
  257. data/trema.gemspec +12 -1
  258. data/unittests/cmockery_trema.h +14 -13
  259. data/unittests/lib/buffer_test.c +1 -1
  260. data/unittests/lib/byteorder_test.c +108 -25
  261. data/unittests/lib/daemon_test.c +141 -5
  262. data/unittests/lib/doubly_linked_list_test.c +5 -1
  263. data/unittests/lib/ether_test.c +4 -4
  264. data/unittests/lib/hash_table_test.c +5 -3
  265. data/unittests/lib/linked_list_test.c +82 -4
  266. data/unittests/lib/log_test.c +96 -5
  267. data/unittests/lib/management_interface_test.c +240 -0
  268. data/unittests/lib/management_service_interface_test.c +319 -0
  269. data/unittests/lib/message_queue_test.c +6 -2
  270. data/unittests/lib/messenger_test.c +167 -2
  271. data/unittests/lib/openflow_application_interface_test.c +16 -22
  272. data/unittests/lib/openflow_message_test.c +721 -24
  273. data/unittests/lib/packet_info_test.c +2 -2
  274. data/unittests/lib/packet_parser_test.c +15 -16
  275. data/unittests/lib/packetin_filter_interface_test.c +6 -6
  276. data/unittests/lib/persistent_storage_test.c +11 -11
  277. data/unittests/lib/stat_test.c +151 -7
  278. data/unittests/lib/timer_test.c +1 -1
  279. data/unittests/lib/trema_private_test.c +2 -2
  280. data/unittests/lib/trema_test.c +40 -12
  281. data/unittests/lib/utility_test.c +3 -3
  282. data/unittests/lib/wrapper_test.c +3 -3
  283. data/unittests/packetin_filter/packetin_filter_test.c +12 -11
  284. data/unittests/switch_manager/switch_manager_test.c +29 -22
  285. metadata +99 -20
  286. data/features/step_definitions/log_steps.rb +0 -90
  287. data/features/step_definitions/run_steps.rb +0 -91
  288. data/features/trema.feature +0 -27
  289. data/features/tutorial.hello_trema.feature +0 -27
  290. data/features/tutorial.packet_in.feature +0 -47
  291. data/features/tutorial.switch_info.feature +0 -55
  292. data/ruby/trema/command/usage.rb +0 -63
@@ -84,7 +84,7 @@ static void
84
84
  test_calloc_packet_info_fails_if_buffer_is_NULL() {
85
85
  expect_string( mock_die, output,
86
86
  "Argument of calloc_packet_info must not be NULL." );
87
- expect_assert_failure( calloc_packet_info( NULL ) ) ;
87
+ expect_assert_failure( calloc_packet_info( NULL ) );
88
88
  }
89
89
 
90
90
 
@@ -105,7 +105,7 @@ static void
105
105
  test_packet_type_eth_dix_fails() {
106
106
  expect_string( mock_die, output,
107
107
  "Argument of packet_type_eth_dix must not be NULL." );
108
- expect_assert_failure( packet_type_eth_dix( NULL ) ) ;
108
+ expect_assert_failure( packet_type_eth_dix( NULL ) );
109
109
  }
110
110
 
111
111
 
@@ -18,13 +18,12 @@
18
18
  */
19
19
 
20
20
 
21
-
22
21
  #include <assert.h>
23
- #include <string.h>
24
- #include <stdio.h>
25
- #include <pcap.h>
26
- #include <netinet/ip.h>
27
22
  #include <netinet/igmp.h>
23
+ #include <netinet/ip.h>
24
+ #include <pcap.h>
25
+ #include <stdio.h>
26
+ #include <string.h>
28
27
  #include "checks.h"
29
28
  #include "cmockery_trema.h"
30
29
  #include "packet_info.h"
@@ -103,7 +102,7 @@ test_parse_packet_snap_succeeds() {
103
102
  assert_memory_equal( packet_info->snap_oui, oui, SNAP_OUI_LENGTH );
104
103
  assert_int_equal( packet_info->snap_type, 0xb700 );
105
104
 
106
- uint16_t sample = ntohs( * ( uint16_t * ) packet_info->l2_payload );
105
+ uint16_t sample = ntohs( *( uint16_t * ) packet_info->l2_payload );
107
106
  assert_int_equal( sample, 0x0400 );
108
107
 
109
108
  assert_int_equal( packet_info->l2_payload_length, 0xb2 );
@@ -213,7 +212,7 @@ test_parse_packet_udp_succeeds() {
213
212
  assert_int_equal( packet_info->udp_len, 0x38 );
214
213
  assert_int_equal( packet_info->udp_checksum, 0x04a1 );
215
214
 
216
- uint16_t sample = ntohs( * ( uint16_t * ) packet_info->l4_payload );
215
+ uint16_t sample = ntohs( *( uint16_t * ) packet_info->l4_payload );
217
216
  assert_int_equal( sample, 0xf937 );
218
217
 
219
218
  assert_int_equal( packet_info->l4_payload_length, 48 );
@@ -260,7 +259,7 @@ test_parse_packet_udp_fragmented_head_succeeds() {
260
259
  assert_int_equal( packet_info->udp_len, 0x2330 );
261
260
  assert_int_equal( packet_info->udp_checksum, 0x8749 );
262
261
 
263
- uint16_t sample = ntohs( * ( uint16_t * ) packet_info->l4_payload );
262
+ uint16_t sample = ntohs( *( uint16_t * ) packet_info->l4_payload );
264
263
  assert_int_equal( sample, 0x8020 );
265
264
 
266
265
  assert_int_equal( packet_info->l4_payload_length, 1472 );
@@ -300,7 +299,7 @@ test_parse_packet_udp_fragmented_next_succeeds() {
300
299
  assert_int_equal( packet_info->ipv4_saddr, 0xc0a8642c );
301
300
  assert_int_equal( packet_info->ipv4_daddr, 0xc0a8642b );
302
301
 
303
- uint16_t sample = ntohs( * ( uint16_t * ) packet_info->l3_payload );
302
+ uint16_t sample = ntohs( *( uint16_t * ) packet_info->l3_payload );
304
303
  assert_int_equal( sample, 0x9102 );
305
304
 
306
305
  assert_int_equal( packet_info->l3_payload_length, 1480 );
@@ -411,7 +410,7 @@ test_parse_packet_tcp_succeeds() {
411
410
  assert_int_equal( packet_info->tcp_checksum, 0x4c2d );
412
411
  assert_int_equal( packet_info->tcp_urgent, 0 );
413
412
 
414
- uint16_t sample = ntohs( * ( uint16_t * ) packet_info->l4_payload );
413
+ uint16_t sample = ntohs( *( uint16_t * ) packet_info->l4_payload );
415
414
  assert_int_equal( sample, 0x4854 );
416
415
 
417
416
  assert_int_equal( packet_info->l4_payload_length, 30 );
@@ -458,7 +457,7 @@ test_parse_packet_icmpv4_echo_request_succeeds() {
458
457
  assert_int_equal( packet_info->icmpv4_id, 1076 );
459
458
  assert_int_equal( packet_info->icmpv4_seq, 1 );
460
459
 
461
- uint16_t sample = ntohs( * ( uint16_t * ) packet_info->l4_payload );
460
+ uint16_t sample = ntohs( *( uint16_t * ) packet_info->l4_payload );
462
461
  assert_int_equal( sample, 0xa0a9 );
463
462
 
464
463
  assert_int_equal( packet_info->l4_payload_length, 56 );
@@ -517,7 +516,7 @@ test_parse_packet_vtag_icmpv4_echo_request_succeeds() {
517
516
  assert_int_equal( packet_info->icmpv4_id, 1024 );
518
517
  assert_int_equal( packet_info->icmpv4_seq, 24576 );
519
518
 
520
- uint16_t sample = ntohs( * ( uint16_t * ) packet_info->l4_payload );
519
+ uint16_t sample = ntohs( *( uint16_t * ) packet_info->l4_payload );
521
520
  assert_int_equal( sample, 0x6162 );
522
521
  assert_int_equal( packet_info->l4_payload_length, 32 );
523
522
 
@@ -575,7 +574,7 @@ test_parse_packet_vtag_icmpv4_echo_reply_succeeds() {
575
574
  assert_int_equal( packet_info->icmpv4_id, 1024 );
576
575
  assert_int_equal( packet_info->icmpv4_seq, 24576 );
577
576
 
578
- uint16_t sample = ntohs( * ( uint16_t * ) packet_info->l4_payload );
577
+ uint16_t sample = ntohs( *( uint16_t * ) packet_info->l4_payload );
579
578
  assert_int_equal( sample, 0x6162 );
580
579
  assert_int_equal( packet_info->l4_payload_length, 32 );
581
580
 
@@ -633,7 +632,7 @@ test_parse_packet_lldp_succeeds() {
633
632
  assert_memory_equal( packet_info->eth_macda, macda, ETH_ADDRLEN );
634
633
  assert_memory_equal( packet_info->eth_macsa, macsa, ETH_ADDRLEN );
635
634
 
636
- uint16_t sample = ntohs( * ( uint16_t * ) packet_info->l3_payload );
635
+ uint16_t sample = ntohs( *( uint16_t * ) packet_info->l3_payload );
637
636
  assert_int_equal( sample, 0x0205 );
638
637
  assert_int_equal( packet_info->l3_payload_length, 46 );
639
638
 
@@ -670,7 +669,7 @@ test_parse_packet_lldp_over_ip_succeeds() {
670
669
  assert_int_equal( packet_info->ipv4_saddr, 0x0a2a7aca );
671
670
  assert_int_equal( packet_info->ipv4_daddr, 0x0a2a7ad4 );
672
671
 
673
- uint16_t sample = ntohs( * ( uint16_t * ) packet_info->l4_payload );
672
+ uint16_t sample = ntohs( *( uint16_t * ) packet_info->l4_payload );
674
673
  assert_int_equal( sample, 0x0180 );
675
674
  assert_int_equal( packet_info->l4_payload_length, 31 );
676
675
 
@@ -695,7 +694,7 @@ test_parse_packet_lldp_over_ip_succeeds() {
695
694
  assert_memory_equal( packet_info->eth_macda, lldp_macda, ETH_ADDRLEN );
696
695
  assert_memory_equal( packet_info->eth_macsa, lldp_macsa, ETH_ADDRLEN );
697
696
 
698
- sample = ntohs( * ( uint16_t * ) packet_info->l3_payload );
697
+ sample = ntohs( *( uint16_t * ) packet_info->l3_payload );
699
698
  assert_int_equal( sample, 0x0205 );
700
699
  assert_int_equal( packet_info->l3_payload_length, 17 );
701
700
 
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  * Unit tests for packetin_filter_interface.[ch]
3
- *
3
+ *
4
4
  * Author: Yasunobu Chiba
5
5
  *
6
6
  * Copyright (C) 2008-2012 NEC Corporation
@@ -42,17 +42,17 @@ typedef struct {
42
42
  } handler_data;
43
43
 
44
44
 
45
- static pid_t ( *original_getpid ) ( void );
45
+ static pid_t ( *original_getpid )( void );
46
46
  static void ( *original_warn )( const char *format, ... );
47
47
  static void ( *original_error )( const char *format, ... );
48
- static bool ( *original_add_message_replied_callback ) ( const char *service_name,
48
+ static bool ( *original_add_message_replied_callback )( const char *service_name,
49
49
  void ( *callback )( uint16_t tag, void *data, size_t len, void *user_data ) );
50
- static bool ( *original_delete_message_replied_callback) ( const char *service_name,
50
+ static bool ( *original_delete_message_replied_callback )( const char *service_name,
51
51
  void ( *callback )( uint16_t tag, void *data, size_t len, void *user_data ) );
52
- static bool ( *original_send_request_message ) ( const char *to_service_name, const char *from_service_name,
52
+ static bool ( *original_send_request_message )( const char *to_service_name, const char *from_service_name,
53
53
  const uint16_t tag, const void *data, size_t len, void *user_data );
54
54
 
55
- static void ( *handle_reply ) ( uint16_t tag, void *data, size_t length, void *user_data ) = NULL;
55
+ static void ( *handle_reply )( uint16_t tag, void *data, size_t length, void *user_data ) = NULL;
56
56
 
57
57
  static void *HANDLER = ( void * ) 0x12345678;
58
58
  static void *USER_DATA = ( void * ) 0x87654321;
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  * Unit tests for persistent_storage.[ch]
3
- *
3
+ *
4
4
  * Author: Yasunobu Chiba
5
5
  *
6
6
  * Copyright (C) 2008-2012 NEC Corporation
@@ -65,7 +65,7 @@ mock_sqlite3_close( sqlite3 *db ) {
65
65
  static char error_message[] = "ERROR";
66
66
 
67
67
  static int
68
- mock_sqlite3_exec( sqlite3 *db, const char *sql, int ( *callback ) ( void *, int, char **, char ** ), void *argument, char **errmsg ) {
68
+ mock_sqlite3_exec( sqlite3 *db, const char *sql, int ( *callback )( void *, int, char **, char ** ), void *argument, char **errmsg ) {
69
69
  sqlite3_exec( db, sql, callback, argument, errmsg );
70
70
  *errmsg = error_message;
71
71
  return ( int ) mock();
@@ -334,7 +334,7 @@ test_set_value_fails_with_too_long_key() {
334
334
  char *expected_error = xasprintf( "Too long key ( length = %u ) specified. Maximum length is %u.",
335
335
  key_length, _get_max_key_length() );
336
336
 
337
- expect_string( mock_error, message, expected_error );
337
+ expect_string( mock_error, message, expected_error );
338
338
  assert_false( set_value( key, "VALUE" ) );
339
339
 
340
340
  xfree( key );
@@ -351,7 +351,7 @@ test_set_value_fails_with_too_long_value() {
351
351
  char *expected_error = xasprintf( "Too long value ( length = %u ) specified. Maximum length is %u.",
352
352
  value_length, _get_max_value_length() );
353
353
 
354
- expect_string( mock_error, message, expected_error );
354
+ expect_string( mock_error, message, expected_error );
355
355
  assert_false( set_value( "KEY", value ) );
356
356
 
357
357
  xfree( value );
@@ -361,14 +361,14 @@ test_set_value_fails_with_too_long_value() {
361
361
 
362
362
  static void
363
363
  test_set_value_fails_with_NULL_key() {
364
- expect_string( mock_error, message, "'key' must be specified." );
364
+ expect_string( mock_error, message, "'key' must be specified." );
365
365
  assert_false( set_value( NULL, "VALUE" ) );
366
366
  }
367
367
 
368
368
 
369
369
  static void
370
370
  test_set_value_fails_with_NULL_value() {
371
- expect_string( mock_error, message, "'value' must be specified." );
371
+ expect_string( mock_error, message, "'value' must be specified." );
372
372
  assert_false( set_value( "KEY", NULL ) );
373
373
  }
374
374
 
@@ -515,7 +515,7 @@ test_get_value_fails_with_too_long_key() {
515
515
  char *expected_error = xasprintf( "Too long key ( length = %u ) specified. Maximum length is %u.",
516
516
  key_length, _get_max_key_length() );
517
517
 
518
- expect_string( mock_error, message, expected_error );
518
+ expect_string( mock_error, message, expected_error );
519
519
  char buf[ 256 ];
520
520
  assert_false( get_value( key, buf, sizeof( buf ) ) );
521
521
 
@@ -539,14 +539,14 @@ test_get_value_fails_with_insufficient_buffer() {
539
539
  static void
540
540
  test_get_value_fails_with_NULL_key() {
541
541
  char buf[ 256 ];
542
- expect_string( mock_error, message, "'key' must be specified." );
542
+ expect_string( mock_error, message, "'key' must be specified." );
543
543
  assert_false( get_value( NULL, buf, sizeof( buf ) ) );
544
544
  }
545
545
 
546
546
 
547
547
  static void
548
548
  test_get_value_fails_with_NULL_value() {
549
- expect_string( mock_error, message, "'value' must be specified." );
549
+ expect_string( mock_error, message, "'value' must be specified." );
550
550
  assert_false( get_value( "KEY", NULL, 128 ) );
551
551
  }
552
552
 
@@ -643,7 +643,7 @@ test_delete_key_value_fails_with_too_long_key() {
643
643
  char *expected_error = xasprintf( "Too long key ( length = %u ) specified. Maximum length is %u.",
644
644
  key_length, _get_max_key_length() );
645
645
 
646
- expect_string( mock_error, message, expected_error );
646
+ expect_string( mock_error, message, expected_error );
647
647
  assert_false( delete_key_value( key ) );
648
648
 
649
649
  xfree( key );
@@ -678,7 +678,7 @@ test_delete_key_value_escapes_string() {
678
678
  set_value( "THIS \"IS\", A, 'KEY'", "VALUE" );
679
679
 
680
680
  assert_true( delete_key_value( "THIS \"IS\", A, 'KEY'" ) );
681
- expect_string( mock_error, message, "Failed to retrieve a value for 'THIS \"IS\", A, 'KEY''." );
681
+ expect_string( mock_error, message, "Failed to retrieve a value for 'THIS \"IS\", A, 'KEY''." );
682
682
  char buf[ 256 ];
683
683
  assert_false( get_value( "THIS \"IS\", A, 'KEY'", buf, sizeof( buf ) ) );
684
684
  }
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  * Unit tests for stat.[ch]
3
- *
3
+ *
4
4
  * Author: Yasunobu Chiba
5
5
  *
6
6
  * Copyright (C) 2008-2012 NEC Corporation
@@ -37,11 +37,6 @@ extern hash_table *stats;
37
37
  void create_stats_table();
38
38
  void delete_stats_table();
39
39
 
40
- typedef struct {
41
- char key[ STAT_KEY_LENGTH ];
42
- uint64_t value;
43
- } stat_entry;
44
-
45
40
 
46
41
  /********************************************************************************
47
42
  * Mock functions.
@@ -77,6 +72,14 @@ mock_error( const char *format, ... ) {
77
72
  }
78
73
 
79
74
 
75
+ void
76
+ mock_callback( const char *key, const uint64_t value, void *user_data ) {
77
+ check_expected( key );
78
+ check_expected( value );
79
+ check_expected( user_data );
80
+ }
81
+
82
+
80
83
  /********************************************************************************
81
84
  * Setup and teardown.
82
85
  ********************************************************************************/
@@ -212,6 +215,135 @@ test_increment_stat_fails_if_not_initialized() {
212
215
  }
213
216
 
214
217
 
218
+ /********************************************************************************
219
+ * reset_stats() tests.
220
+ ********************************************************************************/
221
+
222
+ static void
223
+ test_reset_stats_succeeds_with_single_entry() {
224
+ assert_true( init_stat() );
225
+
226
+ const char *key = "key";
227
+ increment_stat( key );
228
+
229
+ reset_stats();
230
+
231
+ hash_iterator iter;
232
+ hash_entry *e = NULL;
233
+ init_hash_iterator( stats, &iter );
234
+ int n_entries = 0;
235
+ while ( ( e = iterate_hash_next( &iter ) ) != NULL ) {
236
+ n_entries++;
237
+ }
238
+ assert_int_equal( n_entries, 0 );
239
+
240
+ assert_true( finalize_stat() );
241
+ }
242
+
243
+
244
+ static void
245
+ test_reset_stats_succeeds_with_multiple_entries() {
246
+ assert_true( init_stat() );
247
+
248
+ const char *keys[] = { "key0", "key1" };
249
+ increment_stat( keys[ 0 ] );
250
+ increment_stat( keys[ 1 ] );
251
+
252
+ reset_stats();
253
+
254
+ hash_iterator iter;
255
+ hash_entry *e = NULL;
256
+ init_hash_iterator( stats, &iter );
257
+ int n_entries = 0;
258
+ while ( ( e = iterate_hash_next( &iter ) ) != NULL ) {
259
+ n_entries++;
260
+ }
261
+ assert_int_equal( n_entries, 0 );
262
+
263
+ assert_true( finalize_stat() );
264
+ }
265
+
266
+
267
+ static void
268
+ test_reset_stats_succeeds_without_entries() {
269
+ assert_true( init_stat() );
270
+
271
+ reset_stats();
272
+
273
+ hash_iterator iter;
274
+ hash_entry *e = NULL;
275
+ init_hash_iterator( stats, &iter );
276
+ int n_entries = 0;
277
+ while ( ( e = iterate_hash_next( &iter ) ) != NULL ) {
278
+ n_entries++;
279
+ }
280
+ assert_int_equal( n_entries, 0 );
281
+
282
+ assert_true( finalize_stat() );
283
+ }
284
+
285
+
286
+ static void
287
+ test_reset_stats_fails_if_not_initialized() {
288
+ expect_assert_failure( reset_stats() );
289
+ }
290
+
291
+
292
+ /********************************************************************************
293
+ * foreach_stat() tests.
294
+ ********************************************************************************/
295
+
296
+ static void
297
+ test_foreach_stat_succeeds() {
298
+ assert_true( init_stat() );
299
+
300
+ const char *keys[] = { "key0", "key1" };
301
+ increment_stat( keys[ 0 ] );
302
+ increment_stat( keys[ 1 ] );
303
+ increment_stat( keys[ 1 ] );
304
+
305
+ void *user_data = ( void * ) ( intptr_t ) 0x1;
306
+
307
+ expect_string( mock_callback, key, keys[ 1 ] );
308
+ expect_value( mock_callback, value, 2 );
309
+ expect_value( mock_callback, user_data, user_data );
310
+
311
+ expect_string( mock_callback, key, keys[ 0 ] );
312
+ expect_value( mock_callback, value, 1 );
313
+ expect_value( mock_callback, user_data, user_data );
314
+
315
+ foreach_stat( mock_callback, user_data );
316
+
317
+ assert_true( finalize_stat() );
318
+ }
319
+
320
+
321
+ static void
322
+ test_foreach_stat_succeeds_without_entries() {
323
+ assert_true( init_stat() );
324
+
325
+ foreach_stat( mock_callback, NULL );
326
+
327
+ assert_true( finalize_stat() );
328
+ }
329
+
330
+
331
+ static void
332
+ test_foreach_stat_fails_if_callback_function_is_NULL() {
333
+ assert_true( init_stat() );
334
+
335
+ expect_assert_failure( foreach_stat( NULL, NULL ) );
336
+
337
+ assert_true( finalize_stat() );
338
+ }
339
+
340
+
341
+ static void
342
+ test_foreach_stat_fails_if_not_initialized() {
343
+ expect_assert_failure( foreach_stat( mock_callback, NULL ) );
344
+ }
345
+
346
+
215
347
  /********************************************************************************
216
348
  * dump_stats() tests.
217
349
  ********************************************************************************/
@@ -274,7 +406,19 @@ main() {
274
406
  unit_test_setup_teardown( test_increment_stat_fails_if_key_is_NULL, reset, reset ),
275
407
  unit_test_setup_teardown( test_increment_stat_fails_if_not_initialized, reset, reset ),
276
408
 
277
- // dump_sats() tests.
409
+ // reset_stats() tests.
410
+ unit_test_setup_teardown( test_reset_stats_succeeds_with_single_entry, reset, reset ),
411
+ unit_test_setup_teardown( test_reset_stats_succeeds_with_multiple_entries, reset, reset ),
412
+ unit_test_setup_teardown( test_reset_stats_succeeds_without_entries, reset, reset ),
413
+ unit_test_setup_teardown( test_reset_stats_fails_if_not_initialized, reset, reset ),
414
+
415
+ // foreach_stat() tests.
416
+ unit_test_setup_teardown( test_foreach_stat_succeeds, reset, reset ),
417
+ unit_test_setup_teardown( test_foreach_stat_succeeds_without_entries, reset, reset ),
418
+ unit_test_setup_teardown( test_foreach_stat_fails_if_callback_function_is_NULL, reset, reset ),
419
+ unit_test_setup_teardown( test_foreach_stat_fails_if_not_initialized, reset, reset ),
420
+
421
+ // dump_stats() tests.
278
422
  unit_test_setup_teardown( test_dump_stats_succeeds, reset, reset ),
279
423
  unit_test_setup_teardown( test_dump_stats_succeeds_without_entries, reset, reset ),
280
424
  unit_test_setup_teardown( test_dump_stats_fails_if_not_initialized, reset, reset ),
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  * Unit tests for timer.[ch]
3
- *
3
+ *
4
4
  * Author: Yasuhito Takamiya <yasuhito@gmail.com>
5
5
  *
6
6
  * Copyright (C) 2008-2012 NEC Corporation