On 9 Sep 2023, at 10:48, 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 <jamestio...@gmail.com>

Hi James,

Thanks for this patch. Some small suggestions below.

Cheers,

Eelco


> ---
> 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"

Move stuff in alphabetical order:

#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 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

Is there an easy way to report this specific test is skipped on Windows? Maybe 
break out this test? See lockfile.at for an example.

> +    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

Reply via email to