|
@@ -18,13 +18,14 @@
|
|
#include <stdarg.h>
|
|
#include <stdarg.h>
|
|
|
|
|
|
#include "../cloptions.h"
|
|
#include "../cloptions.h"
|
|
|
|
+#include "../perfdhcp.h"
|
|
|
|
+#include "../dkdebug.h"
|
|
|
|
|
|
// Up to 4 arguments may be specified
|
|
// Up to 4 arguments may be specified
|
|
// The final argument must be NULL. This is not counted in the 4 arguments.
|
|
// The final argument must be NULL. This is not counted in the 4 arguments.
|
|
-int checkOption(confdata_t* confdata, int retExpected, ...) {
|
|
|
|
|
|
+int checkOption(int retExpected, ...) {
|
|
const char* argv[6] = { "perfdhcp" };
|
|
const char* argv[6] = { "perfdhcp" };
|
|
int argc = 1;
|
|
int argc = 1;
|
|
- const char* server;
|
|
|
|
int ret;
|
|
int ret;
|
|
const char* p;
|
|
const char* p;
|
|
va_list ap;
|
|
va_list ap;
|
|
@@ -37,30 +38,23 @@ int checkOption(confdata_t* confdata, int retExpected, ...) {
|
|
}
|
|
}
|
|
va_end(ap);
|
|
va_end(ap);
|
|
argv[argc++] = "foo"; /* server */
|
|
argv[argc++] = "foo"; /* server */
|
|
- ret = procArgs(argc, argv, confdata, &server);
|
|
|
|
|
|
+ ret = procArgs(argc, argv);
|
|
EXPECT_EQ(ret, retExpected);
|
|
EXPECT_EQ(ret, retExpected);
|
|
return(ret == retExpected);
|
|
return(ret == retExpected);
|
|
}
|
|
}
|
|
|
|
|
|
void checkOptionInvalid(const char* optflag, const char* optval) {
|
|
void checkOptionInvalid(const char* optflag, const char* optval) {
|
|
- confdata_t confdata;
|
|
|
|
-
|
|
|
|
- checkOption(&confdata, 2, optflag, optval, NULL);
|
|
|
|
|
|
+ checkOption(2, optflag, optval, NULL);
|
|
}
|
|
}
|
|
|
|
|
|
-int checkOptionValid(const char* optflag, const char* optval,
|
|
|
|
- confdata_t* confdata) {
|
|
|
|
|
|
+int checkOptionValid(const char* optflag, const char* optval) {
|
|
|
|
|
|
- return(checkOption(confdata, 1, optflag, optval, NULL));
|
|
|
|
|
|
+ return(checkOption(1, optflag, optval, NULL));
|
|
}
|
|
}
|
|
|
|
|
|
-void checkPosFloatOpt(const char* optflag) {
|
|
|
|
- confdata_t confdata;
|
|
|
|
-
|
|
|
|
- if (checkOptionValid(optflag, "100.0", &confdata)) {
|
|
|
|
- EXPECT_EQ(100.0,
|
|
|
|
- confdata.map[(unsigned)optflag[1]]->values[0]->
|
|
|
|
- value.floatval);
|
|
|
|
|
|
+void checkPosFloatOpt(const char* optflag, double (*retfunc)(void)) {
|
|
|
|
+ if (checkOptionValid(optflag, "100.0")) {
|
|
|
|
+ EXPECT_EQ(100.0, (*retfunc)());
|
|
}
|
|
}
|
|
checkOptionInvalid(optflag, "0");
|
|
checkOptionInvalid(optflag, "0");
|
|
checkOptionInvalid(optflag, "-1");
|
|
checkOptionInvalid(optflag, "-1");
|
|
@@ -69,12 +63,9 @@ void checkPosFloatOpt(const char* optflag) {
|
|
checkOptionInvalid(optflag, "x");
|
|
checkOptionInvalid(optflag, "x");
|
|
}
|
|
}
|
|
|
|
|
|
-void checkPosIntOpt(const char* optflag) {
|
|
|
|
- confdata_t confdata;
|
|
|
|
-
|
|
|
|
- if (checkOptionValid(optflag, "100", &confdata)) {
|
|
|
|
- EXPECT_EQ(100,
|
|
|
|
- confdata.map[(unsigned)optflag[1]]->values[0]->value.nnint);
|
|
|
|
|
|
+void checkPosIntOpt(const char* optflag, unsigned (*retfunc)(void)) {
|
|
|
|
+ if (checkOptionValid(optflag, "100")) {
|
|
|
|
+ EXPECT_EQ(100, (*retfunc)());
|
|
}
|
|
}
|
|
checkOptionInvalid(optflag, "0");
|
|
checkOptionInvalid(optflag, "0");
|
|
checkOptionInvalid(optflag, "-1");
|
|
checkOptionInvalid(optflag, "-1");
|
|
@@ -82,87 +73,84 @@ void checkPosIntOpt(const char* optflag) {
|
|
checkOptionInvalid(optflag, "x");
|
|
checkOptionInvalid(optflag, "x");
|
|
}
|
|
}
|
|
|
|
|
|
-void checkFlag(const char* optflag) {
|
|
|
|
- confdata_t confdata;
|
|
|
|
-
|
|
|
|
- if (checkOptionValid(optflag, NULL, &confdata)) {
|
|
|
|
- EXPECT_EQ(1,
|
|
|
|
- confdata.map[(unsigned)optflag[1]]->values[0]->
|
|
|
|
- value.switchval);
|
|
|
|
|
|
+void checkFlag(const char* optflag, int (*retfunc)(void)) {
|
|
|
|
+ if (checkOptionValid(optflag, NULL)) {
|
|
|
|
+ EXPECT_EQ(1, (*retfunc)());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
-void checkStrOpt(const char* optflag) {
|
|
|
|
- confdata_t confdata;
|
|
|
|
-
|
|
|
|
- if (checkOptionValid(optflag, "bar", &confdata)) {
|
|
|
|
- EXPECT_EQ("bar",
|
|
|
|
- confdata.map[(unsigned)optflag[1]]->values[0]->value.string);
|
|
|
|
|
|
+void checkStrOpt(const char* optflag, const char *(*retfunc)(void)) {
|
|
|
|
+ if (checkOptionValid(optflag, "bar")) {
|
|
|
|
+ EXPECT_EQ("bar", (*retfunc)());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
-void checkNEStrOpt(const char* optflag) {
|
|
|
|
- confdata_t confdata;
|
|
|
|
-
|
|
|
|
- if (checkOptionValid(optflag, "bar", &confdata)) {
|
|
|
|
- EXPECT_EQ("bar",
|
|
|
|
- confdata.map[(unsigned)optflag[1]]->values[0]->value.string);
|
|
|
|
|
|
+void checkNEStrOpt(const char* optflag, const char *(*retfunc)(void)) {
|
|
|
|
+ if (checkOptionValid(optflag, "bar")) {
|
|
|
|
+ EXPECT_EQ("bar", (*retfunc)());
|
|
}
|
|
}
|
|
checkOptionInvalid(optflag, "");
|
|
checkOptionInvalid(optflag, "");
|
|
}
|
|
}
|
|
|
|
|
|
void checkFlagHandled(const char* optflag) {
|
|
void checkFlagHandled(const char* optflag) {
|
|
- confdata_t confdata;
|
|
|
|
-
|
|
|
|
- checkOption(&confdata, 0, optflag, NULL);
|
|
|
|
|
|
+ checkOption(0, optflag, NULL);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+// Command line option tests
|
|
|
|
+
|
|
TEST(CommandOptionsTest, numreq) {
|
|
TEST(CommandOptionsTest, numreq) {
|
|
- checkPosIntOpt("-n");
|
|
|
|
|
|
+ checkPosIntOpt("-n", getnumRequest);
|
|
}
|
|
}
|
|
|
|
|
|
TEST(CommandOptionsTest, rate) {
|
|
TEST(CommandOptionsTest, rate) {
|
|
- checkPosIntOpt("-r");
|
|
|
|
|
|
+ checkPosIntOpt("-r", getrate);
|
|
}
|
|
}
|
|
|
|
|
|
TEST(CommandOptionsTest, droptime) {
|
|
TEST(CommandOptionsTest, droptime) {
|
|
- checkPosFloatOpt("-d");
|
|
|
|
|
|
+ checkPosFloatOpt("-d", getdropTime);
|
|
}
|
|
}
|
|
|
|
|
|
TEST(CommandOptionsTest, period) {
|
|
TEST(CommandOptionsTest, period) {
|
|
- checkPosFloatOpt("-p");
|
|
|
|
|
|
+ checkPosFloatOpt("-p", gettestPeriod);
|
|
}
|
|
}
|
|
|
|
|
|
-TEST(CommandOptionsTest, v4) {
|
|
|
|
- checkFlag("-4");
|
|
|
|
|
|
+TEST(CommandOptionsTest, help) {
|
|
|
|
+ checkFlagHandled("-h");
|
|
}
|
|
}
|
|
|
|
|
|
-TEST(CommandOptionsTest, v6) {
|
|
|
|
- checkFlag("-6");
|
|
|
|
|
|
+TEST(CommandOptionsTest, version) {
|
|
|
|
+ checkFlagHandled("-v");
|
|
}
|
|
}
|
|
|
|
|
|
-TEST(CommandOptionsTest, initial) {
|
|
|
|
- checkFlag("-i");
|
|
|
|
|
|
+TEST(CommandOptionsTest, v4) {
|
|
|
|
+ if (checkOptionValid("-4", NULL)) {
|
|
|
|
+ EXPECT_EQ(0, getv6());
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
-TEST(CommandOptionsTest, help) {
|
|
|
|
- checkFlagHandled("-h");
|
|
|
|
|
|
+TEST(CommandOptionsTest, v6) {
|
|
|
|
+ checkFlag("-6", getv6);
|
|
}
|
|
}
|
|
|
|
|
|
-TEST(CommandOptionsTest, version) {
|
|
|
|
- checkFlagHandled("-v");
|
|
|
|
|
|
+TEST(CommandOptionsTest, initial) {
|
|
|
|
+ checkFlag("-i", getinitialOnly);
|
|
}
|
|
}
|
|
|
|
|
|
TEST(CommandOptionsTest, localname) {
|
|
TEST(CommandOptionsTest, localname) {
|
|
- checkNEStrOpt("-l");
|
|
|
|
|
|
+ checkNEStrOpt("-l", getlocalName);
|
|
}
|
|
}
|
|
|
|
|
|
TEST(CommandOptionsTest, diagnostics) {
|
|
TEST(CommandOptionsTest, diagnostics) {
|
|
- checkStrOpt("-x");
|
|
|
|
|
|
+ if (checkOptionValid("-x", "sm")) {
|
|
|
|
+ EXPECT_EQ(1, dk_set(DK_SOCK));
|
|
|
|
+ EXPECT_EQ(1, dk_set(DK_MSG));
|
|
|
|
+ EXPECT_EQ(0, dk_set(DK_PACKET));
|
|
|
|
+ }
|
|
|
|
+ checkOptionInvalid("-x", "z");
|
|
}
|
|
}
|
|
|
|
|
|
TEST(CommandOptionsTest, maxdrop) {
|
|
TEST(CommandOptionsTest, maxdrop) {
|
|
- checkNEStrOpt("-D");
|
|
|
|
|
|
+ checkNEStrOpt("-D", getmaxDrop);
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
/*
|
|
@@ -180,33 +168,27 @@ TEST(CommandOptionsTest, v4v6) {
|
|
}
|
|
}
|
|
|
|
|
|
TEST(CommandOptionsTest, ilr6) {
|
|
TEST(CommandOptionsTest, ilr6) {
|
|
- confdata_t confdata;
|
|
|
|
-
|
|
|
|
- if (checkOption(&confdata, 1, "-6i", "-leth0", "-r", "50", NULL)) {
|
|
|
|
- EXPECT_EQ("eth0",
|
|
|
|
- confdata.map[(unsigned)'l']->values[0]->value.string);
|
|
|
|
- EXPECT_EQ(50, confdata.map[(unsigned)'r']->values[0]->value.nnint);
|
|
|
|
- EXPECT_EQ(1, confdata.map[(unsigned)'6']->values[0]-> value.switchval);
|
|
|
|
- EXPECT_EQ(1, confdata.map[(unsigned)'i']->values[0]-> value.switchval);
|
|
|
|
|
|
+ if (checkOption(1, "-6i", "-leth0", "-r", "50", NULL)) {
|
|
|
|
+ EXPECT_EQ("eth0", getlocalName());
|
|
|
|
+ EXPECT_EQ(50, getrate());
|
|
|
|
+ EXPECT_EQ(1, getv6());
|
|
|
|
+ EXPECT_EQ(1, getinitialOnly());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
TEST(CommandOptionsTest, ind) {
|
|
TEST(CommandOptionsTest, ind) {
|
|
- confdata_t confdata;
|
|
|
|
-
|
|
|
|
- if (checkOption(&confdata, 1, "-i", "-n10", "-d", "5", NULL)) {
|
|
|
|
- EXPECT_EQ(1, confdata.map[(unsigned)'i']->values[0]-> value.switchval);
|
|
|
|
- EXPECT_EQ(10, confdata.map[(unsigned)'n']->values[0]->value.nnint);
|
|
|
|
- EXPECT_EQ(5, confdata.map[(unsigned)'d']->values[0]-> value.floatval);
|
|
|
|
|
|
+ if (checkOption(1, "-i", "-n10", "-d", "5", NULL)) {
|
|
|
|
+ EXPECT_EQ(1, getinitialOnly());
|
|
|
|
+ EXPECT_EQ(10, getnumRequest());
|
|
|
|
+ EXPECT_EQ(5, getdropTime());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
TEST(CommandOptionsTest, px) {
|
|
TEST(CommandOptionsTest, px) {
|
|
- confdata_t confdata;
|
|
|
|
-
|
|
|
|
- if (checkOption(&confdata, 1, "-p", "5.5", "-x", "fo", NULL)) {
|
|
|
|
- EXPECT_EQ("fo",
|
|
|
|
- confdata.map[(unsigned)'x']->values[0]->value.string);
|
|
|
|
- EXPECT_EQ(5.5, confdata.map[(unsigned)'p']->values[0]->value.floatval);
|
|
|
|
|
|
+ if (checkOption(1, "-p", "5.5", "-x", "a", NULL)) {
|
|
|
|
+ EXPECT_EQ(5.5, gettestPeriod());
|
|
|
|
+ EXPECT_EQ(1, dk_set(DK_SOCK));
|
|
|
|
+ EXPECT_EQ(1, dk_set(DK_MSG));
|
|
|
|
+ EXPECT_EQ(1, dk_set(DK_PACKET));
|
|
}
|
|
}
|
|
}
|
|
}
|