1 1.1 christos /* $NetBSD: stats_test.c,v 1.3 2025/01/26 16:25:50 christos Exp $ */ 2 1.1 christos 3 1.1 christos /* 4 1.1 christos * Copyright (C) Internet Systems Consortium, Inc. ("ISC") 5 1.1 christos * 6 1.1 christos * SPDX-License-Identifier: MPL-2.0 7 1.1 christos * 8 1.1 christos * This Source Code Form is subject to the terms of the Mozilla Public 9 1.1 christos * License, v. 2.0. If a copy of the MPL was not distributed with this 10 1.1 christos * file, you can obtain one at https://mozilla.org/MPL/2.0/. 11 1.1 christos * 12 1.1 christos * See the COPYRIGHT file distributed with this work for additional 13 1.1 christos * information regarding copyright ownership. 14 1.1 christos */ 15 1.1 christos 16 1.1 christos #include <inttypes.h> 17 1.1 christos #include <sched.h> /* IWYU pragma: keep */ 18 1.1 christos #include <setjmp.h> 19 1.1 christos #include <stdarg.h> 20 1.1 christos #include <stddef.h> 21 1.1 christos #include <stdlib.h> 22 1.1 christos #include <string.h> 23 1.1 christos 24 1.1 christos #define UNIT_TESTING 25 1.1 christos #include <cmocka.h> 26 1.1 christos 27 1.1 christos #include <isc/mem.h> 28 1.1 christos #include <isc/result.h> 29 1.1 christos #include <isc/stats.h> 30 1.1 christos #include <isc/util.h> 31 1.1 christos 32 1.1 christos #include <tests/isc.h> 33 1.1 christos 34 1.1 christos /* test stats */ 35 1.1 christos ISC_RUN_TEST_IMPL(isc_stats_basic) { 36 1.1 christos isc_stats_t *stats = NULL; 37 1.1 christos 38 1.3 christos isc_stats_create(mctx, &stats, 4); 39 1.1 christos assert_int_equal(isc_stats_ncounters(stats), 4); 40 1.1 christos 41 1.1 christos /* Default all 0. */ 42 1.1 christos for (int i = 0; i < isc_stats_ncounters(stats); i++) { 43 1.1 christos assert_int_equal(isc_stats_get_counter(stats, i), 0); 44 1.1 christos } 45 1.1 christos 46 1.1 christos /* Test increment. */ 47 1.1 christos for (int i = 0; i < isc_stats_ncounters(stats); i++) { 48 1.1 christos isc_stats_increment(stats, i); 49 1.1 christos assert_int_equal(isc_stats_get_counter(stats, i), 1); 50 1.1 christos isc_stats_increment(stats, i); 51 1.1 christos assert_int_equal(isc_stats_get_counter(stats, i), 2); 52 1.1 christos } 53 1.1 christos 54 1.1 christos /* Test decrement. */ 55 1.1 christos for (int i = 0; i < isc_stats_ncounters(stats); i++) { 56 1.1 christos isc_stats_decrement(stats, i); 57 1.1 christos assert_int_equal(isc_stats_get_counter(stats, i), 1); 58 1.1 christos isc_stats_decrement(stats, i); 59 1.1 christos assert_int_equal(isc_stats_get_counter(stats, i), 0); 60 1.1 christos } 61 1.1 christos 62 1.1 christos /* Test set. */ 63 1.1 christos for (int i = 0; i < isc_stats_ncounters(stats); i++) { 64 1.1 christos isc_stats_set(stats, i, i); 65 1.1 christos assert_int_equal(isc_stats_get_counter(stats, i), i); 66 1.1 christos } 67 1.1 christos 68 1.1 christos /* Test update if greater. */ 69 1.1 christos for (int i = 0; i < isc_stats_ncounters(stats); i++) { 70 1.1 christos isc_stats_update_if_greater(stats, i, i); 71 1.1 christos assert_int_equal(isc_stats_get_counter(stats, i), i); 72 1.1 christos isc_stats_update_if_greater(stats, i, i + 1); 73 1.1 christos assert_int_equal(isc_stats_get_counter(stats, i), i + 1); 74 1.1 christos } 75 1.1 christos 76 1.1 christos /* Test resize. */ 77 1.1 christos isc_stats_resize(&stats, 3); 78 1.1 christos assert_int_equal(isc_stats_ncounters(stats), 4); 79 1.1 christos isc_stats_resize(&stats, 4); 80 1.1 christos assert_int_equal(isc_stats_ncounters(stats), 4); 81 1.1 christos isc_stats_resize(&stats, 5); 82 1.1 christos assert_int_equal(isc_stats_ncounters(stats), 5); 83 1.1 christos 84 1.1 christos /* Existing counters are retained */ 85 1.1 christos for (int i = 0; i < isc_stats_ncounters(stats); i++) { 86 1.1 christos uint32_t expect = i + 1; 87 1.1 christos if (i == 4) { 88 1.1 christos expect = 0; 89 1.1 christos } 90 1.1 christos assert_int_equal(isc_stats_get_counter(stats, i), expect); 91 1.1 christos } 92 1.1 christos 93 1.1 christos isc_stats_detach(&stats); 94 1.1 christos } 95 1.1 christos 96 1.1 christos ISC_TEST_LIST_START 97 1.1 christos 98 1.1 christos ISC_TEST_ENTRY(isc_stats_basic) 99 1.1 christos 100 1.1 christos ISC_TEST_LIST_END 101 1.1 christos 102 1.1 christos ISC_TEST_MAIN 103