On Sat, Sep 9, 2023 at 4:49 AM James Raphael Tiovalen <jamestio...@gmail.com> 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 <jamestio...@gmail.com>
Looks good! Acked-by: Mike Pattrick <m...@redhat.com> > --- > Revisions: > > v1 -> v2: Incorporate Mike's suggestions. > --- > tests/automake.mk | 1 + > tests/library.at | 5 ++ > tests/test-byteq.c | 143 +++++++++++++++++++++++++++++++++++++++++++++ > 3 files changed, 149 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..2fc4851bf 100644 > --- a/tests/library.at > +++ b/tests/library.at > @@ -88,6 +88,11 @@ AT_KEYWORDS([byte order]) > AT_CHECK([ovstest test-byte-order]) > AT_CLEANUP > > +AT_SETUP([byteq operations]) > +AT_CHECK([ovstest test-byteq], [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..4a957021b > --- /dev/null > +++ b/tests/test-byteq.c > @@ -0,0 +1,143 @@ > +/* > + * 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 <stdio.h> > +#include <string.h> > +#include <stdint.h> > +#include <unistd.h> > +#include <sys/types.h> > +#include "ovstest.h" > +#include "byteq.h" > +#include "util.h" > + > +static void test_byteq_main(int argc OVS_UNUSED, char *argv[] OVS_UNUSED); > +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 > +} > + > +static void > +run_test(void (*function)(void)) > +{ > + function(); > + printf("."); > +} > + > +static void > +test_byteq_main(int argc OVS_UNUSED, char *argv[] OVS_UNUSED) > +{ > + run_test(test_byteq_put_get); > + run_test(test_byteq_putn_get); > + run_test(test_byteq_put_string); > + run_test(test_byteq_write_read); > + printf("\n"); > +} > + > +OVSTEST_REGISTER("test-byteq", test_byteq_main); > -- > 2.42.0 > > _______________________________________________ > dev mailing list > d...@openvswitch.org > https://mail.openvswitch.org/mailman/listinfo/ovs-dev > _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev