// Copyright 2019 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "osp/public/endpoint_request_ids.h" #include "gtest/gtest.h" namespace openscreen { namespace osp { // These tests validate RequestId generation for two endpoints with IDs 3 and 7. TEST(EndpointRequestIdsTest, StrictlyIncreasingRequestIdSequence) { EndpointRequestIds request_ids_client(EndpointRequestIds::Role::kClient); EXPECT_EQ(0u, request_ids_client.GetNextRequestId(7)); EXPECT_EQ(2u, request_ids_client.GetNextRequestId(7)); EXPECT_EQ(4u, request_ids_client.GetNextRequestId(7)); EXPECT_EQ(0u, request_ids_client.GetNextRequestId(3)); EXPECT_EQ(6u, request_ids_client.GetNextRequestId(7)); EXPECT_EQ(2u, request_ids_client.GetNextRequestId(3)); EndpointRequestIds request_ids_server(EndpointRequestIds::Role::kServer); EXPECT_EQ(1u, request_ids_server.GetNextRequestId(7)); EXPECT_EQ(3u, request_ids_server.GetNextRequestId(7)); EXPECT_EQ(5u, request_ids_server.GetNextRequestId(7)); EXPECT_EQ(1u, request_ids_server.GetNextRequestId(3)); EXPECT_EQ(7u, request_ids_server.GetNextRequestId(7)); EXPECT_EQ(3u, request_ids_server.GetNextRequestId(3)); } TEST(EndpointRequestIdsTest, ResetRequestId) { EndpointRequestIds request_ids_client(EndpointRequestIds::Role::kClient); EXPECT_EQ(0u, request_ids_client.GetNextRequestId(7)); EXPECT_EQ(2u, request_ids_client.GetNextRequestId(7)); request_ids_client.ResetRequestId(7); EXPECT_EQ(0u, request_ids_client.GetNextRequestId(7)); EXPECT_EQ(2u, request_ids_client.GetNextRequestId(7)); EXPECT_EQ(0u, request_ids_client.GetNextRequestId(3)); EXPECT_EQ(2u, request_ids_client.GetNextRequestId(3)); request_ids_client.ResetRequestId(7); EXPECT_EQ(0u, request_ids_client.GetNextRequestId(7)); EXPECT_EQ(2u, request_ids_client.GetNextRequestId(7)); EXPECT_EQ(4u, request_ids_client.GetNextRequestId(3)); EXPECT_EQ(6u, request_ids_client.GetNextRequestId(3)); EndpointRequestIds request_ids_server(EndpointRequestIds::Role::kServer); EXPECT_EQ(1u, request_ids_server.GetNextRequestId(7)); EXPECT_EQ(3u, request_ids_server.GetNextRequestId(7)); request_ids_server.ResetRequestId(7); EXPECT_EQ(1u, request_ids_server.GetNextRequestId(7)); EXPECT_EQ(3u, request_ids_server.GetNextRequestId(7)); EXPECT_EQ(1u, request_ids_server.GetNextRequestId(3)); EXPECT_EQ(3u, request_ids_server.GetNextRequestId(3)); request_ids_server.ResetRequestId(7); EXPECT_EQ(1u, request_ids_server.GetNextRequestId(7)); EXPECT_EQ(3u, request_ids_server.GetNextRequestId(7)); EXPECT_EQ(5u, request_ids_server.GetNextRequestId(3)); EXPECT_EQ(7u, request_ids_server.GetNextRequestId(3)); } TEST(EndpointRequestIdsTest, ResetAll) { EndpointRequestIds request_ids_client(EndpointRequestIds::Role::kClient); EXPECT_EQ(0u, request_ids_client.GetNextRequestId(7)); EXPECT_EQ(2u, request_ids_client.GetNextRequestId(7)); EXPECT_EQ(0u, request_ids_client.GetNextRequestId(3)); EXPECT_EQ(2u, request_ids_client.GetNextRequestId(3)); request_ids_client.Reset(); EXPECT_EQ(0u, request_ids_client.GetNextRequestId(7)); EXPECT_EQ(0u, request_ids_client.GetNextRequestId(3)); EndpointRequestIds request_ids_server(EndpointRequestIds::Role::kServer); EXPECT_EQ(1u, request_ids_server.GetNextRequestId(7)); EXPECT_EQ(3u, request_ids_server.GetNextRequestId(7)); EXPECT_EQ(1u, request_ids_server.GetNextRequestId(3)); EXPECT_EQ(3u, request_ids_server.GetNextRequestId(3)); request_ids_server.Reset(); EXPECT_EQ(1u, request_ids_server.GetNextRequestId(7)); EXPECT_EQ(1u, request_ids_server.GetNextRequestId(3)); } } // namespace osp } // namespace openscreen