Blame tests/dtls-sliding-window.c

Packit Service 4684c1
/*
Packit Service 4684c1
 * Copyright (C) 2016 Red Hat, Inc.
Packit Service 4684c1
 *
Packit Service 4684c1
 * Author: Nikos Mavrogiannopoulos
Packit Service 4684c1
 *
Packit Service 4684c1
 * This file is part of GnuTLS.
Packit Service 4684c1
 *
Packit Service 4684c1
 * GnuTLS is free software; you can redistribute it and/or modify it
Packit Service 4684c1
 * under the terms of the GNU General Public License as published by
Packit Service 4684c1
 * the Free Software Foundation; either version 3 of the License, or
Packit Service 4684c1
 * (at your option) any later version.
Packit Service 4684c1
 *
Packit Service 4684c1
 * GnuTLS is distributed in the hope that it will be useful, but
Packit Service 4684c1
 * WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 4684c1
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit Service 4684c1
 * General Public License for more details.
Packit Service 4684c1
 *
Packit Service 4684c1
 * You should have received a copy of the GNU General Public License
Packit Service 4684c1
 * along with GnuTLS; if not, write to the Free Software Foundation,
Packit Service 4684c1
 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
Packit Service 4684c1
 */
Packit Service 4684c1
Packit Service 4684c1
#include <config.h>
Packit Service 4684c1
#include <stdarg.h>
Packit Service 4684c1
#include <stddef.h>
Packit Service 4684c1
#include <setjmp.h>
Packit Service 4684c1
#include <cmocka.h>
Packit Service 4684c1
#include <limits.h>
Packit Service 4684c1
#include <stdint.h>
Packit Service 4684c1
#include <string.h>
Packit Service 4684c1
Packit Service 4684c1
/* Unit test for DTLS window handling */
Packit Service 4684c1
Packit Service 4684c1
#define LARGE_INT 4194304
Packit Service 4684c1
#define INT_OVER_32_BITS 281474976708836LL
Packit Service 4684c1
Packit Service 4684c1
struct record_parameters_st {
Packit Service 4684c1
	uint64_t dtls_sw_bits;
Packit Service 4684c1
	uint64_t dtls_sw_next;
Packit Service 4684c1
	unsigned dtls_sw_have_recv;
Packit Service 4684c1
	unsigned epoch;
Packit Service 4684c1
};
Packit Service 4684c1
Packit Service 4684c1
#define gnutls_assert_val(x) x
Packit Service 4684c1
Packit Service 4684c1
void _dtls_reset_window(struct record_parameters_st *rp);
Packit Service 4684c1
int _dtls_record_check(struct record_parameters_st *rp, uint64_t _seq);
Packit Service 4684c1
Packit Service 4684c1
#define DTLS_SW_NO_INCLUDES
Packit Service 4684c1
#include "../lib/dtls-sw.c"
Packit Service 4684c1
Packit Service 4684c1
#define RESET_WINDOW \
Packit Service 4684c1
	memset(&state, 0, sizeof(state))
Packit Service 4684c1
Packit Service 4684c1
#define SET_WINDOW_NEXT(x) \
Packit Service 4684c1
	state.dtls_sw_next = (((x)&DTLS_SEQ_NUM_MASK))
Packit Service 4684c1
Packit Service 4684c1
#define SET_WINDOW_LAST_RECV(x) \
Packit Service 4684c1
	t = x; \
Packit Service 4684c1
	state.dtls_sw_have_recv = 1
Packit Service 4684c1
Packit Service 4684c1
static void check_dtls_window_uninit_0(void **glob_state)
Packit Service 4684c1
{
Packit Service 4684c1
	struct record_parameters_st state;
Packit Service 4684c1
	uint64_t t;
Packit Service 4684c1
Packit Service 4684c1
	RESET_WINDOW;
Packit Service 4684c1
	SET_WINDOW_NEXT(0);
Packit Service 4684c1
Packit Service 4684c1
	t = 0;
Packit Service 4684c1
Packit Service 4684c1
	assert_int_equal(_dtls_record_check(&state, t), 0);
Packit Service 4684c1
}
Packit Service 4684c1
Packit Service 4684c1
static void check_dtls_window_uninit_large(void **glob_state)
Packit Service 4684c1
{
Packit Service 4684c1
	struct record_parameters_st state;
Packit Service 4684c1
	uint64_t t;
Packit Service 4684c1
Packit Service 4684c1
	RESET_WINDOW;
Packit Service 4684c1
Packit Service 4684c1
	t = LARGE_INT+1+64;
Packit Service 4684c1
Packit Service 4684c1
	assert_int_equal(_dtls_record_check(&state, t), 0);
Packit Service 4684c1
}
Packit Service 4684c1
Packit Service 4684c1
static void check_dtls_window_uninit_very_large(void **glob_state)
Packit Service 4684c1
{
Packit Service 4684c1
	struct record_parameters_st state;
Packit Service 4684c1
	uint64_t t;
Packit Service 4684c1
Packit Service 4684c1
	RESET_WINDOW;
Packit Service 4684c1
Packit Service 4684c1
	t = INT_OVER_32_BITS;
Packit Service 4684c1
Packit Service 4684c1
	assert_int_equal(_dtls_record_check(&state, t), 0);
Packit Service 4684c1
}
Packit Service 4684c1
Packit Service 4684c1
static void check_dtls_window_12(void **glob_state)
Packit Service 4684c1
{
Packit Service 4684c1
	struct record_parameters_st state;
Packit Service 4684c1
	uint64_t t;
Packit Service 4684c1
Packit Service 4684c1
	RESET_WINDOW;
Packit Service 4684c1
	SET_WINDOW_NEXT(0);
Packit Service 4684c1
	SET_WINDOW_LAST_RECV(1);
Packit Service 4684c1
Packit Service 4684c1
	t = 2;
Packit Service 4684c1
Packit Service 4684c1
	assert_int_equal(_dtls_record_check(&state, t), 0);
Packit Service 4684c1
}
Packit Service 4684c1
Packit Service 4684c1
static void check_dtls_window_19(void **glob_state)
Packit Service 4684c1
{
Packit Service 4684c1
	struct record_parameters_st state;
Packit Service 4684c1
	uint64_t t;
Packit Service 4684c1
Packit Service 4684c1
	RESET_WINDOW;
Packit Service 4684c1
	SET_WINDOW_NEXT(0);
Packit Service 4684c1
	SET_WINDOW_LAST_RECV(1);
Packit Service 4684c1
Packit Service 4684c1
	t = 9;
Packit Service 4684c1
Packit Service 4684c1
	assert_int_equal(_dtls_record_check(&state, t), 0);
Packit Service 4684c1
}
Packit Service 4684c1
Packit Service 4684c1
static void check_dtls_window_skip1(void **glob_state)
Packit Service 4684c1
{
Packit Service 4684c1
	struct record_parameters_st state;
Packit Service 4684c1
	uint64_t t;
Packit Service 4684c1
	unsigned i;
Packit Service 4684c1
Packit Service 4684c1
	RESET_WINDOW;
Packit Service 4684c1
	SET_WINDOW_NEXT(0);
Packit Service 4684c1
	SET_WINDOW_LAST_RECV(1);
Packit Service 4684c1
Packit Service 4684c1
	for (i=2;i<256;i+=2) {
Packit Service 4684c1
		t = i;
Packit Service 4684c1
		assert_int_equal(_dtls_record_check(&state, t), 0);
Packit Service 4684c1
	}
Packit Service 4684c1
}
Packit Service 4684c1
Packit Service 4684c1
static void check_dtls_window_skip3(void **glob_state)
Packit Service 4684c1
{
Packit Service 4684c1
	struct record_parameters_st state;
Packit Service 4684c1
	uint64_t t;
Packit Service 4684c1
	unsigned i;
Packit Service 4684c1
Packit Service 4684c1
	RESET_WINDOW;
Packit Service 4684c1
	SET_WINDOW_NEXT(0);
Packit Service 4684c1
	SET_WINDOW_LAST_RECV(1);
Packit Service 4684c1
Packit Service 4684c1
	for (i=5;i<256;i+=2) {
Packit Service 4684c1
		t = i;
Packit Service 4684c1
		assert_int_equal(_dtls_record_check(&state, t), 0);
Packit Service 4684c1
	}
Packit Service 4684c1
}
Packit Service 4684c1
Packit Service 4684c1
static void check_dtls_window_21(void **glob_state)
Packit Service 4684c1
{
Packit Service 4684c1
	struct record_parameters_st state;
Packit Service 4684c1
	uint64_t t;
Packit Service 4684c1
Packit Service 4684c1
	RESET_WINDOW;
Packit Service 4684c1
	SET_WINDOW_NEXT(0);
Packit Service 4684c1
	SET_WINDOW_LAST_RECV(2);
Packit Service 4684c1
Packit Service 4684c1
	t = 1;
Packit Service 4684c1
Packit Service 4684c1
	assert_int_equal(_dtls_record_check(&state, t), 0);
Packit Service 4684c1
}
Packit Service 4684c1
Packit Service 4684c1
static void check_dtls_window_91(void **glob_state)
Packit Service 4684c1
{
Packit Service 4684c1
	struct record_parameters_st state;
Packit Service 4684c1
	uint64_t t;
Packit Service 4684c1
Packit Service 4684c1
	RESET_WINDOW;
Packit Service 4684c1
	SET_WINDOW_NEXT(0);
Packit Service 4684c1
	SET_WINDOW_LAST_RECV(9);
Packit Service 4684c1
Packit Service 4684c1
	t = 1;
Packit Service 4684c1
Packit Service 4684c1
	assert_int_equal(_dtls_record_check(&state, t), 0);
Packit Service 4684c1
}
Packit Service 4684c1
Packit Service 4684c1
static void check_dtls_window_large_21(void **glob_state)
Packit Service 4684c1
{
Packit Service 4684c1
	struct record_parameters_st state;
Packit Service 4684c1
	uint64_t t;
Packit Service 4684c1
Packit Service 4684c1
	RESET_WINDOW;
Packit Service 4684c1
	SET_WINDOW_NEXT(LARGE_INT);
Packit Service 4684c1
	SET_WINDOW_LAST_RECV(LARGE_INT+2);
Packit Service 4684c1
Packit Service 4684c1
	t = LARGE_INT+1;
Packit Service 4684c1
Packit Service 4684c1
	assert_int_equal(_dtls_record_check(&state, t), 0);
Packit Service 4684c1
}
Packit Service 4684c1
Packit Service 4684c1
static void check_dtls_window_large_12(void **glob_state)
Packit Service 4684c1
{
Packit Service 4684c1
	struct record_parameters_st state;
Packit Service 4684c1
	uint64_t t;
Packit Service 4684c1
Packit Service 4684c1
	RESET_WINDOW;
Packit Service 4684c1
	SET_WINDOW_NEXT(LARGE_INT);
Packit Service 4684c1
	SET_WINDOW_LAST_RECV(LARGE_INT+1);
Packit Service 4684c1
Packit Service 4684c1
	t = LARGE_INT+2;
Packit Service 4684c1
Packit Service 4684c1
	assert_int_equal(_dtls_record_check(&state, t), 0);
Packit Service 4684c1
}
Packit Service 4684c1
Packit Service 4684c1
static void check_dtls_window_large_91(void **glob_state)
Packit Service 4684c1
{
Packit Service 4684c1
	struct record_parameters_st state;
Packit Service 4684c1
	uint64_t t;
Packit Service 4684c1
Packit Service 4684c1
	RESET_WINDOW;
Packit Service 4684c1
	SET_WINDOW_NEXT(LARGE_INT);
Packit Service 4684c1
	SET_WINDOW_LAST_RECV(LARGE_INT+9);
Packit Service 4684c1
Packit Service 4684c1
	t = LARGE_INT+1;
Packit Service 4684c1
Packit Service 4684c1
	assert_int_equal(_dtls_record_check(&state, t), 0);
Packit Service 4684c1
}
Packit Service 4684c1
Packit Service 4684c1
static void check_dtls_window_large_19(void **glob_state)
Packit Service 4684c1
{
Packit Service 4684c1
	struct record_parameters_st state;
Packit Service 4684c1
	uint64_t t;
Packit Service 4684c1
Packit Service 4684c1
	RESET_WINDOW;
Packit Service 4684c1
	SET_WINDOW_NEXT(LARGE_INT);
Packit Service 4684c1
	SET_WINDOW_LAST_RECV(LARGE_INT+1);
Packit Service 4684c1
Packit Service 4684c1
	t = LARGE_INT+9;
Packit Service 4684c1
Packit Service 4684c1
	assert_int_equal(_dtls_record_check(&state, t), 0);
Packit Service 4684c1
}
Packit Service 4684c1
Packit Service 4684c1
static void check_dtls_window_very_large_12(void **glob_state)
Packit Service 4684c1
{
Packit Service 4684c1
	struct record_parameters_st state;
Packit Service 4684c1
	uint64_t t;
Packit Service 4684c1
Packit Service 4684c1
	RESET_WINDOW;
Packit Service 4684c1
	SET_WINDOW_NEXT(INT_OVER_32_BITS);
Packit Service 4684c1
	SET_WINDOW_LAST_RECV(INT_OVER_32_BITS+1);
Packit Service 4684c1
Packit Service 4684c1
	t = INT_OVER_32_BITS+2;
Packit Service 4684c1
Packit Service 4684c1
	assert_int_equal(_dtls_record_check(&state, t), 0);
Packit Service 4684c1
}
Packit Service 4684c1
Packit Service 4684c1
static void check_dtls_window_very_large_91(void **glob_state)
Packit Service 4684c1
{
Packit Service 4684c1
	struct record_parameters_st state;
Packit Service 4684c1
	uint64_t t;
Packit Service 4684c1
Packit Service 4684c1
	RESET_WINDOW;
Packit Service 4684c1
	SET_WINDOW_NEXT(INT_OVER_32_BITS);
Packit Service 4684c1
	SET_WINDOW_LAST_RECV(INT_OVER_32_BITS+9);
Packit Service 4684c1
Packit Service 4684c1
	t = INT_OVER_32_BITS+1;
Packit Service 4684c1
Packit Service 4684c1
	assert_int_equal(_dtls_record_check(&state, t), 0);
Packit Service 4684c1
}
Packit Service 4684c1
Packit Service 4684c1
static void check_dtls_window_very_large_19(void **glob_state)
Packit Service 4684c1
{
Packit Service 4684c1
	struct record_parameters_st state;
Packit Service 4684c1
	uint64_t t;
Packit Service 4684c1
Packit Service 4684c1
	RESET_WINDOW;
Packit Service 4684c1
	SET_WINDOW_NEXT(INT_OVER_32_BITS);
Packit Service 4684c1
	SET_WINDOW_LAST_RECV(INT_OVER_32_BITS+1);
Packit Service 4684c1
Packit Service 4684c1
	t = INT_OVER_32_BITS+9;
Packit Service 4684c1
Packit Service 4684c1
	assert_int_equal(_dtls_record_check(&state, t), 0);
Packit Service 4684c1
}
Packit Service 4684c1
Packit Service 4684c1
static void check_dtls_window_outside(void **glob_state)
Packit Service 4684c1
{
Packit Service 4684c1
	struct record_parameters_st state;
Packit Service 4684c1
	uint64_t t;
Packit Service 4684c1
Packit Service 4684c1
	RESET_WINDOW;
Packit Service 4684c1
	SET_WINDOW_NEXT(0);
Packit Service 4684c1
	SET_WINDOW_LAST_RECV(1);
Packit Service 4684c1
Packit Service 4684c1
	t = 1+64;
Packit Service 4684c1
Packit Service 4684c1
	assert_int_equal(_dtls_record_check(&state, t), 0);
Packit Service 4684c1
}
Packit Service 4684c1
Packit Service 4684c1
static void check_dtls_window_large_outside(void **glob_state)
Packit Service 4684c1
{
Packit Service 4684c1
	struct record_parameters_st state;
Packit Service 4684c1
	uint64_t t;
Packit Service 4684c1
Packit Service 4684c1
	RESET_WINDOW;
Packit Service 4684c1
	SET_WINDOW_NEXT(LARGE_INT);
Packit Service 4684c1
	SET_WINDOW_LAST_RECV(LARGE_INT+1);
Packit Service 4684c1
Packit Service 4684c1
	t = LARGE_INT+1+64;
Packit Service 4684c1
Packit Service 4684c1
	assert_int_equal(_dtls_record_check(&state, t), 0);
Packit Service 4684c1
}
Packit Service 4684c1
Packit Service 4684c1
static void check_dtls_window_very_large_outside(void **glob_state)
Packit Service 4684c1
{
Packit Service 4684c1
	struct record_parameters_st state;
Packit Service 4684c1
	uint64_t t;
Packit Service 4684c1
Packit Service 4684c1
	RESET_WINDOW;
Packit Service 4684c1
	SET_WINDOW_NEXT(INT_OVER_32_BITS);
Packit Service 4684c1
	SET_WINDOW_LAST_RECV(INT_OVER_32_BITS+1);
Packit Service 4684c1
Packit Service 4684c1
	t = INT_OVER_32_BITS+1+64;
Packit Service 4684c1
Packit Service 4684c1
	assert_int_equal(_dtls_record_check(&state, t), 0);
Packit Service 4684c1
}
Packit Service 4684c1
Packit Service 4684c1
static void check_dtls_window_dup1(void **glob_state)
Packit Service 4684c1
{
Packit Service 4684c1
	struct record_parameters_st state;
Packit Service 4684c1
	uint64_t t;
Packit Service 4684c1
Packit Service 4684c1
	RESET_WINDOW;
Packit Service 4684c1
	SET_WINDOW_NEXT(LARGE_INT-1);
Packit Service 4684c1
	SET_WINDOW_LAST_RECV(LARGE_INT);
Packit Service 4684c1
Packit Service 4684c1
	t = LARGE_INT;
Packit Service 4684c1
	assert_int_equal(_dtls_record_check(&state, t), 0);
Packit Service 4684c1
Packit Service 4684c1
	t = LARGE_INT+1;
Packit Service 4684c1
	assert_int_equal(_dtls_record_check(&state, t), 0);
Packit Service 4684c1
Packit Service 4684c1
	t = LARGE_INT+16;
Packit Service 4684c1
	assert_int_equal(_dtls_record_check(&state, t), 0);
Packit Service 4684c1
Packit Service 4684c1
	t = LARGE_INT+1;
Packit Service 4684c1
	assert_int_equal(_dtls_record_check(&state, t), -3);
Packit Service 4684c1
}
Packit Service 4684c1
Packit Service 4684c1
static void check_dtls_window_dup2(void **glob_state)
Packit Service 4684c1
{
Packit Service 4684c1
	struct record_parameters_st state;
Packit Service 4684c1
	uint64_t t;
Packit Service 4684c1
Packit Service 4684c1
	RESET_WINDOW;
Packit Service 4684c1
	SET_WINDOW_NEXT(LARGE_INT-1);
Packit Service 4684c1
	SET_WINDOW_LAST_RECV(LARGE_INT);
Packit Service 4684c1
Packit Service 4684c1
	t = LARGE_INT;
Packit Service 4684c1
	assert_int_equal(_dtls_record_check(&state, t), 0);
Packit Service 4684c1
Packit Service 4684c1
	t = LARGE_INT+16;
Packit Service 4684c1
	assert_int_equal(_dtls_record_check(&state, t), 0);
Packit Service 4684c1
Packit Service 4684c1
	t = LARGE_INT+1;
Packit Service 4684c1
	assert_int_equal(_dtls_record_check(&state, t), 0);
Packit Service 4684c1
Packit Service 4684c1
	t = LARGE_INT+16;
Packit Service 4684c1
	assert_int_equal(_dtls_record_check(&state, t), -3);
Packit Service 4684c1
}
Packit Service 4684c1
Packit Service 4684c1
static void check_dtls_window_dup3(void **glob_state)
Packit Service 4684c1
{
Packit Service 4684c1
	struct record_parameters_st state;
Packit Service 4684c1
	uint64_t t;
Packit Service 4684c1
Packit Service 4684c1
	RESET_WINDOW;
Packit Service 4684c1
	SET_WINDOW_NEXT(LARGE_INT-1);
Packit Service 4684c1
	SET_WINDOW_LAST_RECV(LARGE_INT);
Packit Service 4684c1
Packit Service 4684c1
	t = LARGE_INT;
Packit Service 4684c1
	assert_int_equal(_dtls_record_check(&state, t), 0);
Packit Service 4684c1
Packit Service 4684c1
	t = LARGE_INT+16;
Packit Service 4684c1
	assert_int_equal(_dtls_record_check(&state, t), 0);
Packit Service 4684c1
Packit Service 4684c1
	t = LARGE_INT+15;
Packit Service 4684c1
	assert_int_equal(_dtls_record_check(&state, t), 0);
Packit Service 4684c1
Packit Service 4684c1
	t = LARGE_INT+14;
Packit Service 4684c1
	assert_int_equal(_dtls_record_check(&state, t), 0);
Packit Service 4684c1
Packit Service 4684c1
	t = LARGE_INT+5;
Packit Service 4684c1
	assert_int_equal(_dtls_record_check(&state, t), 0);
Packit Service 4684c1
Packit Service 4684c1
	t = LARGE_INT+5;
Packit Service 4684c1
	assert_int_equal(_dtls_record_check(&state, t), -3);
Packit Service 4684c1
}
Packit Service 4684c1
Packit Service 4684c1
static void check_dtls_window_out_of_order(void **glob_state)
Packit Service 4684c1
{
Packit Service 4684c1
	struct record_parameters_st state;
Packit Service 4684c1
	uint64_t t;
Packit Service 4684c1
Packit Service 4684c1
	RESET_WINDOW;
Packit Service 4684c1
	SET_WINDOW_NEXT(LARGE_INT-1);
Packit Service 4684c1
	SET_WINDOW_LAST_RECV(LARGE_INT);
Packit Service 4684c1
Packit Service 4684c1
	t = LARGE_INT;
Packit Service 4684c1
	assert_int_equal(_dtls_record_check(&state, t), 0);
Packit Service 4684c1
Packit Service 4684c1
	t = LARGE_INT+8;
Packit Service 4684c1
	assert_int_equal(_dtls_record_check(&state, t), 0);
Packit Service 4684c1
Packit Service 4684c1
	t = LARGE_INT+7;
Packit Service 4684c1
	assert_int_equal(_dtls_record_check(&state, t), 0);
Packit Service 4684c1
Packit Service 4684c1
	t = LARGE_INT+6;
Packit Service 4684c1
	assert_int_equal(_dtls_record_check(&state, t), 0);
Packit Service 4684c1
Packit Service 4684c1
	t = LARGE_INT+5;
Packit Service 4684c1
	assert_int_equal(_dtls_record_check(&state, t), 0);
Packit Service 4684c1
Packit Service 4684c1
	t = LARGE_INT+4;
Packit Service 4684c1
	assert_int_equal(_dtls_record_check(&state, t), 0);
Packit Service 4684c1
Packit Service 4684c1
	t = LARGE_INT+3;
Packit Service 4684c1
	assert_int_equal(_dtls_record_check(&state, t), 0);
Packit Service 4684c1
Packit Service 4684c1
	t = LARGE_INT+2;
Packit Service 4684c1
	assert_int_equal(_dtls_record_check(&state, t), 0);
Packit Service 4684c1
Packit Service 4684c1
	t = LARGE_INT+1;
Packit Service 4684c1
	assert_int_equal(_dtls_record_check(&state, t), 0);
Packit Service 4684c1
Packit Service 4684c1
	t = LARGE_INT+9;
Packit Service 4684c1
	assert_int_equal(_dtls_record_check(&state, t), 0);
Packit Service 4684c1
}
Packit Service 4684c1
Packit Service 4684c1
static void check_dtls_window_epoch_higher(void **glob_state)
Packit Service 4684c1
{
Packit Service 4684c1
	struct record_parameters_st state;
Packit Service 4684c1
	uint64_t t;
Packit Service 4684c1
Packit Service 4684c1
	RESET_WINDOW;
Packit Service 4684c1
	SET_WINDOW_NEXT(LARGE_INT-1);
Packit Service 4684c1
	SET_WINDOW_LAST_RECV(LARGE_INT);
Packit Service 4684c1
Packit Service 4684c1
	t = LARGE_INT;
Packit Service 4684c1
	assert_int_equal(_dtls_record_check(&state, t), 0);
Packit Service 4684c1
Packit Service 4684c1
	t = (LARGE_INT+8)|0x1000000000000LL;
Packit Service 4684c1
	assert_int_equal(_dtls_record_check(&state, t), -1);
Packit Service 4684c1
}
Packit Service 4684c1
Packit Service 4684c1
static void check_dtls_window_epoch_lower(void **glob_state)
Packit Service 4684c1
{
Packit Service 4684c1
	struct record_parameters_st state;
Packit Service 4684c1
	uint64_t t;
Packit Service 4684c1
Packit Service 4684c1
	RESET_WINDOW;
Packit Service 4684c1
	t = 0x1000000000000LL;
Packit Service 4684c1
Packit Service 4684c1
	state.epoch = 1;
Packit Service 4684c1
	SET_WINDOW_NEXT(0x1000000000000LL);
Packit Service 4684c1
	SET_WINDOW_LAST_RECV((0x1000000000000LL) + 1);
Packit Service 4684c1
Packit Service 4684c1
	t = 2 | 0x1000000000000LL;
Packit Service 4684c1
	assert_int_equal(_dtls_record_check(&state, t), 0);
Packit Service 4684c1
Packit Service 4684c1
	t = 3 | 0x1000000000000LL;
Packit Service 4684c1
	assert_int_equal(_dtls_record_check(&state, t), 0);
Packit Service 4684c1
Packit Service 4684c1
	t = 5;
Packit Service 4684c1
	assert_int_equal(_dtls_record_check(&state, t), -1);
Packit Service 4684c1
}
Packit Service 4684c1
Packit Service 4684c1
Packit Service 4684c1
int main(void)
Packit Service 4684c1
{
Packit Service 4684c1
	const struct CMUnitTest tests[] = {
Packit Service 4684c1
		cmocka_unit_test(check_dtls_window_uninit_0),
Packit Service 4684c1
		cmocka_unit_test(check_dtls_window_uninit_large),
Packit Service 4684c1
		cmocka_unit_test(check_dtls_window_uninit_very_large),
Packit Service 4684c1
		cmocka_unit_test(check_dtls_window_12),
Packit Service 4684c1
		cmocka_unit_test(check_dtls_window_21),
Packit Service 4684c1
		cmocka_unit_test(check_dtls_window_19),
Packit Service 4684c1
		cmocka_unit_test(check_dtls_window_91),
Packit Service 4684c1
		cmocka_unit_test(check_dtls_window_large_21),
Packit Service 4684c1
		cmocka_unit_test(check_dtls_window_large_12),
Packit Service 4684c1
		cmocka_unit_test(check_dtls_window_large_19),
Packit Service 4684c1
		cmocka_unit_test(check_dtls_window_large_91),
Packit Service 4684c1
		cmocka_unit_test(check_dtls_window_dup1),
Packit Service 4684c1
		cmocka_unit_test(check_dtls_window_dup2),
Packit Service 4684c1
		cmocka_unit_test(check_dtls_window_dup3),
Packit Service 4684c1
		cmocka_unit_test(check_dtls_window_outside),
Packit Service 4684c1
		cmocka_unit_test(check_dtls_window_large_outside),
Packit Service 4684c1
		cmocka_unit_test(check_dtls_window_out_of_order),
Packit Service 4684c1
		cmocka_unit_test(check_dtls_window_epoch_lower),
Packit Service 4684c1
		cmocka_unit_test(check_dtls_window_epoch_higher),
Packit Service 4684c1
		cmocka_unit_test(check_dtls_window_very_large_12),
Packit Service 4684c1
		cmocka_unit_test(check_dtls_window_very_large_19),
Packit Service 4684c1
		cmocka_unit_test(check_dtls_window_very_large_91),
Packit Service 4684c1
		cmocka_unit_test(check_dtls_window_very_large_outside),
Packit Service 4684c1
		cmocka_unit_test(check_dtls_window_skip3),
Packit Service 4684c1
		cmocka_unit_test(check_dtls_window_skip1)
Packit Service 4684c1
	};
Packit Service 4684c1
	return cmocka_run_group_tests(tests, NULL, NULL);
Packit Service 4684c1
}