Message ID | 20231005142833.728406-1-jamestiotio@gmail.com |
---|---|
State | Changes Requested, archived |
Headers | show |
Series | [ovs-dev,v4] tests: Add some tests for byteq module. | expand |
Context | Check | Description |
---|---|---|
ovsrobot/apply-robot | success | apply and check: success |
ovsrobot/github-robot-_Build_and_Test | success | github build: passed |
ovsrobot/intel-ovs-compilation | success | test: success |
On Thu, Oct 05, 2023 at 10:28:33PM +0800, James Raphael Tiovalen wrote: > This commit adds a non-exhaustive list of tests for some of the > functions declared in `lib/byteq`. > > These unit tests have been executed via `make check` and they > successfully passed. > > Signed-off-by: James Raphael Tiovalen <jamestiotio@gmail.com> Acked-by: Simon Horman <horms@ovn.org>
On 5 Oct 2023, at 16:28, James Raphael Tiovalen wrote: > This commit adds a non-exhaustive list of tests for some of the > functions declared in `lib/byteq`. > > These unit tests have been executed via `make check` and they > successfully passed. > > Signed-off-by: James Raphael Tiovalen <jamestiotio@gmail.com> Hi James, thanks for the updated patch. Find some comments below. Cheers, Eelco > --- > Revisions: > > v1 -> v2: Incorporate Mike's suggestions. > v2 -> v3: Add Eelco's suggestions to alphabetically order includes and > indicate skipped tests. > v3 -> v4: Fix checkpatch error and warning. > --- > tests/automake.mk | 1 + > tests/library.at | 13 ++++ > tests/test-byteq.c | 160 +++++++++++++++++++++++++++++++++++++++++++++ > 3 files changed, 174 insertions(+) > create mode 100644 tests/test-byteq.c > > diff --git a/tests/automake.mk b/tests/automake.mk > index 720c94449..f8a925012 100644 > --- a/tests/automake.mk > +++ b/tests/automake.mk > @@ -455,6 +455,7 @@ tests_ovstest_SOURCES = \ > tests/test-barrier.c \ > tests/test-bundle.c \ > tests/test-byte-order.c \ > + tests/test-byteq.c \ > tests/test-classifier.c \ > tests/test-ccmap.c \ > tests/test-cmap.c \ > diff --git a/tests/library.at b/tests/library.at > index 164ae789d..ea714ae9c 100644 > --- a/tests/library.at > +++ b/tests/library.at > @@ -88,6 +88,19 @@ AT_KEYWORDS([byte order]) > AT_CHECK([ovstest test-byte-order]) > AT_CLEANUP > > +AT_SETUP([byteq operations]) See also below, but we should not refer to platform types in test names, so we should probablt split it up in general, and read-write. So something like: AT_SETUP(byteq - basic) Or somehting like common, or general. I have no real preference. > +AT_KEYWORDS([byteq]) > +AT_CHECK([ovstest test-byteq regular], [0], [... > +]) > +AT_CLEANUP > + > +AT_SETUP([byteq operations only on non-Windows platforms]) See above, something like: AT_SETUP(byteq - write_read) > +AT_KEYWORDS([byteq]) > +AT_SKIP_IF([test "$IS_WIN32" = "yes"]) > +AT_CHECK([ovstest test-byteq non-windows], [0], [. > +]) > +AT_CLEANUP > + > AT_SETUP([random number generator]) > AT_CHECK([ovstest test-random], [0], [dnl > average=7fa2014f > diff --git a/tests/test-byteq.c b/tests/test-byteq.c > new file mode 100644 > index 000000000..26e6129bd > --- /dev/null > +++ b/tests/test-byteq.c > @@ -0,0 +1,160 @@ > +/* > + * Copyright (C) 2023 Hewlett Packard Enterprise Development LP > + * > + * Licensed under the Apache License, Version 2.0 (the "License"); > + * you may not use this file except in compliance with the License. > + * You may obtain a copy of the License at: > + * > + * http://www.apache.org/licenses/LICENSE-2.0 > + * > + * Unless required by applicable law or agreed to in writing, software > + * distributed under the License is distributed on an "AS IS" BASIS, > + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. > + * See the License for the specific language governing permissions and > + * limitations under the License. > + */ > + > +#include <config.h> > +#undef NDEBUG > +#include <stdint.h> > +#include <stdio.h> > +#include <string.h> > +#include <sys/types.h> > +#include <unistd.h> > +#include "byteq.h" > +#include "ovstest.h" > +#include "util.h" > + > +static void test_byteq_main(int argc, char *argv[]); > +static void test_byteq_put_get(void); > +static void test_byteq_putn_get(void); > +static void test_byteq_put_string(void); > +static void test_byteq_write_read(void); > + > +#define SIZE 256 > + > +static void > +test_byteq_put_get(void) > +{ > + struct byteq bq; > + uint8_t buffer[SIZE]; > + const char *input = "Open vSwitch"; > + const int input_len = strlen(input); > + > + byteq_init(&bq, buffer, SIZE); > + for (int i = 0; i < input_len; i++) { > + byteq_put(&bq, input[i]); > + } > + for (int i = 0; i < input_len; i++) { > + ovs_assert(byteq_get(&bq) == input[i]); > + } > +} > + > +static void > +test_byteq_putn_get(void) > +{ > + struct byteq bq; > + uint8_t buffer[SIZE]; > + const char *input = "Open vSwitch"; > + const int input_len = strlen(input); > + > + byteq_init(&bq, buffer, SIZE); > + byteq_putn(&bq, input, input_len); > + for (int i = 0; i < input_len; i++) { > + ovs_assert(byteq_get(&bq) == input[i]); > + } > +} > + > +static void > +test_byteq_put_string(void) > +{ > + struct byteq bq; > + uint8_t buffer[SIZE]; > + const char *input = "Open vSwitch"; > + const int input_len = strlen(input); > + > + byteq_init(&bq, buffer, SIZE); > + byteq_put_string(&bq, input); > + for (int i = 0; i < input_len; i++) { > + ovs_assert(byteq_get(&bq) == input[i]); > + } > +} > + > +static void > +test_byteq_write_read(void) > +{ > +#ifndef _WIN32 > + int fd[2]; > + pid_t childpid; > + int rc; > + struct byteq bq; > + uint8_t buffer[SIZE]; > + const char *input = "Open vSwitch"; > + const int input_len = strlen(input); > + > + byteq_init(&bq, buffer, SIZE); > + byteq_put_string(&bq, input); > + > + rc = pipe(fd); > + ovs_assert(rc == 0); > + > + /* Flush stdout */ > + fflush(stdout); > + > + childpid = fork(); > + ovs_assert(childpid != -1); > + if (childpid == 0) { > + /* Child process closes stdout */ > + close(STDOUT_FILENO); > + /* Child process closes up input side of pipe */ > + close(fd[0]); > + rc = byteq_write(&bq, fd[1]); > + ovs_assert(rc == 0); > + exit(0); > + } else { > + /* Parent process closes up output side of pipe */ > + close(fd[1]); > + rc = byteq_read(&bq, fd[0]); > + ovs_assert(rc == EOF); > + for (int i = 0; i < input_len; i++) { > + ovs_assert(byteq_get(&bq) == input[i]); > + } > + } > +#endif /* _WIN32 */ > +} > + > +static void > +run_test(void (*function)(void)) > +{ > + function(); > + printf("."); > +} > + > +static void > +test_byteq_main(int argc, char *argv[]) > +{ > + if (argc != 2) { > + ovs_fatal(0, "exactly one argument required\n" > + "the argument must be one of the following:\n" > + "\tregular\n" > + "\tnon-windows\n"); > + } > + > + /* Check whether to run only non-Windows tests or not. */ > + if (strcmp(argv[1], "non-windows") == 0) { > + run_test(test_byteq_write_read); > + printf("\n"); > + } else if (strcmp(argv[1], "regular") == 0) { Guess nameing here should match the tests, i.e. basic and write_read. > + run_test(test_byteq_put_get); > + run_test(test_byteq_putn_get); > + run_test(test_byteq_put_string); > + printf("\n"); > + } else { > + ovs_fatal(0, "invalid argument\n" > + "the argument must be one of the following:\n" > + "\tregular\n" > + "\tnon-windows\n"); > + } > +} > + > +OVSTEST_REGISTER("test-byteq", test_byteq_main); > -- > 2.42.0 > > _______________________________________________ > dev mailing list > dev@openvswitch.org > https://mail.openvswitch.org/mailman/listinfo/ovs-dev
diff --git a/tests/automake.mk b/tests/automake.mk index 720c94449..f8a925012 100644 --- a/tests/automake.mk +++ b/tests/automake.mk @@ -455,6 +455,7 @@ tests_ovstest_SOURCES = \ tests/test-barrier.c \ tests/test-bundle.c \ tests/test-byte-order.c \ + tests/test-byteq.c \ tests/test-classifier.c \ tests/test-ccmap.c \ tests/test-cmap.c \ diff --git a/tests/library.at b/tests/library.at index 164ae789d..ea714ae9c 100644 --- a/tests/library.at +++ b/tests/library.at @@ -88,6 +88,19 @@ AT_KEYWORDS([byte order]) AT_CHECK([ovstest test-byte-order]) AT_CLEANUP +AT_SETUP([byteq operations]) +AT_KEYWORDS([byteq]) +AT_CHECK([ovstest test-byteq regular], [0], [... +]) +AT_CLEANUP + +AT_SETUP([byteq operations only on non-Windows platforms]) +AT_KEYWORDS([byteq]) +AT_SKIP_IF([test "$IS_WIN32" = "yes"]) +AT_CHECK([ovstest test-byteq non-windows], [0], [. +]) +AT_CLEANUP + AT_SETUP([random number generator]) AT_CHECK([ovstest test-random], [0], [dnl average=7fa2014f diff --git a/tests/test-byteq.c b/tests/test-byteq.c new file mode 100644 index 000000000..26e6129bd --- /dev/null +++ b/tests/test-byteq.c @@ -0,0 +1,160 @@ +/* + * Copyright (C) 2023 Hewlett Packard Enterprise Development LP + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include <config.h> +#undef NDEBUG +#include <stdint.h> +#include <stdio.h> +#include <string.h> +#include <sys/types.h> +#include <unistd.h> +#include "byteq.h" +#include "ovstest.h" +#include "util.h" + +static void test_byteq_main(int argc, char *argv[]); +static void test_byteq_put_get(void); +static void test_byteq_putn_get(void); +static void test_byteq_put_string(void); +static void test_byteq_write_read(void); + +#define SIZE 256 + +static void +test_byteq_put_get(void) +{ + struct byteq bq; + uint8_t buffer[SIZE]; + const char *input = "Open vSwitch"; + const int input_len = strlen(input); + + byteq_init(&bq, buffer, SIZE); + for (int i = 0; i < input_len; i++) { + byteq_put(&bq, input[i]); + } + for (int i = 0; i < input_len; i++) { + ovs_assert(byteq_get(&bq) == input[i]); + } +} + +static void +test_byteq_putn_get(void) +{ + struct byteq bq; + uint8_t buffer[SIZE]; + const char *input = "Open vSwitch"; + const int input_len = strlen(input); + + byteq_init(&bq, buffer, SIZE); + byteq_putn(&bq, input, input_len); + for (int i = 0; i < input_len; i++) { + ovs_assert(byteq_get(&bq) == input[i]); + } +} + +static void +test_byteq_put_string(void) +{ + struct byteq bq; + uint8_t buffer[SIZE]; + const char *input = "Open vSwitch"; + const int input_len = strlen(input); + + byteq_init(&bq, buffer, SIZE); + byteq_put_string(&bq, input); + for (int i = 0; i < input_len; i++) { + ovs_assert(byteq_get(&bq) == input[i]); + } +} + +static void +test_byteq_write_read(void) +{ +#ifndef _WIN32 + int fd[2]; + pid_t childpid; + int rc; + struct byteq bq; + uint8_t buffer[SIZE]; + const char *input = "Open vSwitch"; + const int input_len = strlen(input); + + byteq_init(&bq, buffer, SIZE); + byteq_put_string(&bq, input); + + rc = pipe(fd); + ovs_assert(rc == 0); + + /* Flush stdout */ + fflush(stdout); + + childpid = fork(); + ovs_assert(childpid != -1); + if (childpid == 0) { + /* Child process closes stdout */ + close(STDOUT_FILENO); + /* Child process closes up input side of pipe */ + close(fd[0]); + rc = byteq_write(&bq, fd[1]); + ovs_assert(rc == 0); + exit(0); + } else { + /* Parent process closes up output side of pipe */ + close(fd[1]); + rc = byteq_read(&bq, fd[0]); + ovs_assert(rc == EOF); + for (int i = 0; i < input_len; i++) { + ovs_assert(byteq_get(&bq) == input[i]); + } + } +#endif /* _WIN32 */ +} + +static void +run_test(void (*function)(void)) +{ + function(); + printf("."); +} + +static void +test_byteq_main(int argc, char *argv[]) +{ + if (argc != 2) { + ovs_fatal(0, "exactly one argument required\n" + "the argument must be one of the following:\n" + "\tregular\n" + "\tnon-windows\n"); + } + + /* Check whether to run only non-Windows tests or not. */ + if (strcmp(argv[1], "non-windows") == 0) { + run_test(test_byteq_write_read); + printf("\n"); + } else if (strcmp(argv[1], "regular") == 0) { + run_test(test_byteq_put_get); + run_test(test_byteq_putn_get); + run_test(test_byteq_put_string); + printf("\n"); + } else { + ovs_fatal(0, "invalid argument\n" + "the argument must be one of the following:\n" + "\tregular\n" + "\tnon-windows\n"); + } +} + +OVSTEST_REGISTER("test-byteq", test_byteq_main);
This commit adds a non-exhaustive list of tests for some of the functions declared in `lib/byteq`. These unit tests have been executed via `make check` and they successfully passed. Signed-off-by: James Raphael Tiovalen <jamestiotio@gmail.com> --- Revisions: v1 -> v2: Incorporate Mike's suggestions. v2 -> v3: Add Eelco's suggestions to alphabetically order includes and indicate skipped tests. v3 -> v4: Fix checkpatch error and warning. --- tests/automake.mk | 1 + tests/library.at | 13 ++++ tests/test-byteq.c | 160 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 174 insertions(+) create mode 100644 tests/test-byteq.c