netdev-dpdk: fix mbuf leaks
[cascardo/ovs.git] / tests / test-jsonrpc.c
index 4ace6dc..feac0b0 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009, 2010, 2011, 2012, 2013, 2014 Nicira, Inc.
+ * Copyright (c) 2009, 2010, 2011, 2012, 2013, 2014, 2015 Nicira, Inc.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  */
 
 #include <config.h>
-
+#undef NDEBUG
 #include "jsonrpc.h"
-
 #include <errno.h>
 #include <fcntl.h>
 #include <getopt.h>
 #include <stdio.h>
 #include <stdlib.h>
-
 #include "command-line.h"
 #include "daemon.h"
 #include "json.h"
+#include "ovstest.h"
 #include "poll-loop.h"
 #include "stream-ssl.h"
 #include "stream.h"
 #include "timeval.h"
 #include "util.h"
-#include "vlog.h"
-#include "ovstest.h"
+#include "openvswitch/vlog.h"
 
-static struct command all_commands[];
-
-static void usage(void) NO_RETURN;
+OVS_NO_RETURN static void usage(void);
 static void parse_options(int argc, char *argv[]);
+static struct ovs_cmdl_command *get_all_commands(void);
 
 static void
 test_jsonrpc_main(int argc, char *argv[])
 {
-    proctitle_init(argc, argv);
+    struct ovs_cmdl_context ctx = { .argc = 0, };
+    ovs_cmdl_proctitle_init(argc, argv);
     set_program_name(argv[0]);
+    service_start(&argc, &argv);
     parse_options(argc, argv);
-    run_command(argc - optind, argv + optind, all_commands);
+    ctx.argc = argc - optind;
+    ctx.argv = argv + optind;
+    ovs_cmdl_run_command(&ctx, get_all_commands());
 }
 
 static void
@@ -64,7 +65,7 @@ parse_options(int argc, char *argv[])
         STREAM_SSL_LONG_OPTIONS,
         {NULL, 0, NULL, 0},
     };
-    char *short_options = long_options_to_short_options(long_options);
+    char *short_options = ovs_cmdl_long_options_to_short_options(long_options);
 
     for (;;) {
         int c = getopt_long(argc, argv, short_options, long_options, NULL);
@@ -168,7 +169,7 @@ handle_rpc(struct jsonrpc *rpc, struct jsonrpc_msg *msg, bool *done)
 }
 
 static void
-do_listen(int argc OVS_UNUSED, char *argv[])
+do_listen(struct ovs_cmdl_context *ctx)
 {
     struct pstream *pstream;
     struct jsonrpc **rpcs;
@@ -176,9 +177,9 @@ do_listen(int argc OVS_UNUSED, char *argv[])
     bool done;
     int error;
 
-    error = jsonrpc_pstream_open(argv[1], &pstream, DSCP_DEFAULT);
+    error = jsonrpc_pstream_open(ctx->argv[1], &pstream, DSCP_DEFAULT);
     if (error) {
-        ovs_fatal(error, "could not listen on \"%s\"", argv[1]);
+        ovs_fatal(error, "could not listen on \"%s\"", ctx->argv[1]);
     }
 
     daemonize();
@@ -251,7 +252,7 @@ do_listen(int argc OVS_UNUSED, char *argv[])
 }
 
 static void
-do_request(int argc OVS_UNUSED, char *argv[])
+do_request(struct ovs_cmdl_context *ctx)
 {
     struct jsonrpc_msg *msg;
     struct jsonrpc *rpc;
@@ -261,18 +262,18 @@ do_request(int argc OVS_UNUSED, char *argv[])
     char *string;
     int error;
 
-    method = argv[2];
-    params = parse_json(argv[3]);
+    method = ctx->argv[2];
+    params = parse_json(ctx->argv[3]);
     msg = jsonrpc_create_request(method, params, NULL);
     string = jsonrpc_msg_is_valid(msg);
     if (string) {
         ovs_fatal(0, "not a valid JSON-RPC request: %s", string);
     }
 
-    error = stream_open_block(jsonrpc_stream_open(argv[1], &stream,
+    error = stream_open_block(jsonrpc_stream_open(ctx->argv[1], &stream,
                               DSCP_DEFAULT), &stream);
     if (error) {
-        ovs_fatal(error, "could not open \"%s\"", argv[1]);
+        ovs_fatal(error, "could not open \"%s\"", ctx->argv[1]);
     }
     rpc = jsonrpc_open(stream);
 
@@ -291,7 +292,7 @@ do_request(int argc OVS_UNUSED, char *argv[])
 }
 
 static void
-do_notify(int argc OVS_UNUSED, char *argv[])
+do_notify(struct ovs_cmdl_context *ctx)
 {
     struct jsonrpc_msg *msg;
     struct jsonrpc *rpc;
@@ -301,18 +302,18 @@ do_notify(int argc OVS_UNUSED, char *argv[])
     char *string;
     int error;
 
-    method = argv[2];
-    params = parse_json(argv[3]);
+    method = ctx->argv[2];
+    params = parse_json(ctx->argv[3]);
     msg = jsonrpc_create_notify(method, params);
     string = jsonrpc_msg_is_valid(msg);
     if (string) {
         ovs_fatal(0, "not a JSON RPC-valid notification: %s", string);
     }
 
-    error = stream_open_block(jsonrpc_stream_open(argv[1], &stream,
+    error = stream_open_block(jsonrpc_stream_open(ctx->argv[1], &stream,
                               DSCP_DEFAULT), &stream);
     if (error) {
-        ovs_fatal(error, "could not open \"%s\"", argv[1]);
+        ovs_fatal(error, "could not open \"%s\"", ctx->argv[1]);
     }
     rpc = jsonrpc_open(stream);
 
@@ -324,17 +325,23 @@ do_notify(int argc OVS_UNUSED, char *argv[])
 }
 
 static void
-do_help(int argc OVS_UNUSED, char *argv[] OVS_UNUSED)
+do_help(struct ovs_cmdl_context *ctx OVS_UNUSED)
 {
     usage();
 }
 
-static struct command all_commands[] = {
-    { "listen", 1, 1, do_listen },
-    { "request", 3, 3, do_request },
-    { "notify", 3, 3, do_notify },
-    { "help", 0, INT_MAX, do_help },
-    { NULL, 0, 0, NULL },
+static struct ovs_cmdl_command all_commands[] = {
+    { "listen", NULL, 1, 1, do_listen },
+    { "request", NULL, 3, 3, do_request },
+    { "notify", NULL, 3, 3, do_notify },
+    { "help", NULL, 0, INT_MAX, do_help },
+    { NULL, NULL, 0, 0, NULL },
 };
 
+static struct ovs_cmdl_command *
+get_all_commands(void)
+{
+    return all_commands;
+}
+
 OVSTEST_REGISTER("test-jsonrpc", test_jsonrpc_main);