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