1 // Copyright 2019 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "osp/public/endpoint_request_ids.h"
6 
7 #include "gtest/gtest.h"
8 
9 namespace openscreen {
10 namespace osp {
11 
12 // These tests validate RequestId generation for two endpoints with IDs 3 and 7.
13 
TEST(EndpointRequestIdsTest,StrictlyIncreasingRequestIdSequence)14 TEST(EndpointRequestIdsTest, StrictlyIncreasingRequestIdSequence) {
15   EndpointRequestIds request_ids_client(EndpointRequestIds::Role::kClient);
16 
17   EXPECT_EQ(0u, request_ids_client.GetNextRequestId(7));
18   EXPECT_EQ(2u, request_ids_client.GetNextRequestId(7));
19   EXPECT_EQ(4u, request_ids_client.GetNextRequestId(7));
20   EXPECT_EQ(0u, request_ids_client.GetNextRequestId(3));
21   EXPECT_EQ(6u, request_ids_client.GetNextRequestId(7));
22   EXPECT_EQ(2u, request_ids_client.GetNextRequestId(3));
23 
24   EndpointRequestIds request_ids_server(EndpointRequestIds::Role::kServer);
25   EXPECT_EQ(1u, request_ids_server.GetNextRequestId(7));
26   EXPECT_EQ(3u, request_ids_server.GetNextRequestId(7));
27   EXPECT_EQ(5u, request_ids_server.GetNextRequestId(7));
28   EXPECT_EQ(1u, request_ids_server.GetNextRequestId(3));
29   EXPECT_EQ(7u, request_ids_server.GetNextRequestId(7));
30   EXPECT_EQ(3u, request_ids_server.GetNextRequestId(3));
31 }
32 
TEST(EndpointRequestIdsTest,ResetRequestId)33 TEST(EndpointRequestIdsTest, ResetRequestId) {
34   EndpointRequestIds request_ids_client(EndpointRequestIds::Role::kClient);
35 
36   EXPECT_EQ(0u, request_ids_client.GetNextRequestId(7));
37   EXPECT_EQ(2u, request_ids_client.GetNextRequestId(7));
38   request_ids_client.ResetRequestId(7);
39   EXPECT_EQ(0u, request_ids_client.GetNextRequestId(7));
40   EXPECT_EQ(2u, request_ids_client.GetNextRequestId(7));
41   EXPECT_EQ(0u, request_ids_client.GetNextRequestId(3));
42   EXPECT_EQ(2u, request_ids_client.GetNextRequestId(3));
43   request_ids_client.ResetRequestId(7);
44   EXPECT_EQ(0u, request_ids_client.GetNextRequestId(7));
45   EXPECT_EQ(2u, request_ids_client.GetNextRequestId(7));
46   EXPECT_EQ(4u, request_ids_client.GetNextRequestId(3));
47   EXPECT_EQ(6u, request_ids_client.GetNextRequestId(3));
48 
49   EndpointRequestIds request_ids_server(EndpointRequestIds::Role::kServer);
50 
51   EXPECT_EQ(1u, request_ids_server.GetNextRequestId(7));
52   EXPECT_EQ(3u, request_ids_server.GetNextRequestId(7));
53   request_ids_server.ResetRequestId(7);
54   EXPECT_EQ(1u, request_ids_server.GetNextRequestId(7));
55   EXPECT_EQ(3u, request_ids_server.GetNextRequestId(7));
56   EXPECT_EQ(1u, request_ids_server.GetNextRequestId(3));
57   EXPECT_EQ(3u, request_ids_server.GetNextRequestId(3));
58   request_ids_server.ResetRequestId(7);
59   EXPECT_EQ(1u, request_ids_server.GetNextRequestId(7));
60   EXPECT_EQ(3u, request_ids_server.GetNextRequestId(7));
61   EXPECT_EQ(5u, request_ids_server.GetNextRequestId(3));
62   EXPECT_EQ(7u, request_ids_server.GetNextRequestId(3));
63 }
64 
TEST(EndpointRequestIdsTest,ResetAll)65 TEST(EndpointRequestIdsTest, ResetAll) {
66   EndpointRequestIds request_ids_client(EndpointRequestIds::Role::kClient);
67 
68   EXPECT_EQ(0u, request_ids_client.GetNextRequestId(7));
69   EXPECT_EQ(2u, request_ids_client.GetNextRequestId(7));
70   EXPECT_EQ(0u, request_ids_client.GetNextRequestId(3));
71   EXPECT_EQ(2u, request_ids_client.GetNextRequestId(3));
72   request_ids_client.Reset();
73   EXPECT_EQ(0u, request_ids_client.GetNextRequestId(7));
74   EXPECT_EQ(0u, request_ids_client.GetNextRequestId(3));
75 
76   EndpointRequestIds request_ids_server(EndpointRequestIds::Role::kServer);
77 
78   EXPECT_EQ(1u, request_ids_server.GetNextRequestId(7));
79   EXPECT_EQ(3u, request_ids_server.GetNextRequestId(7));
80   EXPECT_EQ(1u, request_ids_server.GetNextRequestId(3));
81   EXPECT_EQ(3u, request_ids_server.GetNextRequestId(3));
82   request_ids_server.Reset();
83   EXPECT_EQ(1u, request_ids_server.GetNextRequestId(7));
84   EXPECT_EQ(1u, request_ids_server.GetNextRequestId(3));
85 }
86 
87 }  // namespace osp
88 }  // namespace openscreen
89