1 /*
2 * Copyright 2018 Google LLC
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17 #include "fcp/secagg/client/secagg_client_completed_state.h"
18
19 #include <string>
20 #include <unordered_map>
21
22 #include "gmock/gmock.h"
23 #include "gtest/gtest.h"
24 #include "absl/container/node_hash_map.h"
25 #include "fcp/base/monitoring.h"
26 #include "fcp/secagg/shared/secagg_messages.pb.h"
27 #include "fcp/secagg/shared/secagg_vector.h"
28 #include "fcp/secagg/testing/mock_send_to_server_interface.h"
29 #include "fcp/secagg/testing/mock_state_transition_listener.h"
30
31 namespace fcp {
32 namespace secagg {
33 namespace {
34
35 using ::testing::Eq;
36
TEST(SecAggClientCompletedStateTest,IsAbortedReturnsFalse)37 TEST(SecAggClientCompletedStateTest, IsAbortedReturnsFalse) {
38 MockSendToServerInterface* sender = new MockSendToServerInterface();
39 MockStateTransitionListener* transition_listener =
40 new MockStateTransitionListener();
41 SecAggClientCompletedState completed_state(
42 std::unique_ptr<SendToServerInterface>{sender},
43 std::unique_ptr<MockStateTransitionListener>{transition_listener});
44 EXPECT_THAT(completed_state.IsAborted(), Eq(false));
45 }
46
TEST(SecAggClientCompletedStateTest,IsCompletedSuccessfullyReturnsTrue)47 TEST(SecAggClientCompletedStateTest, IsCompletedSuccessfullyReturnsTrue) {
48 MockSendToServerInterface* sender = new MockSendToServerInterface();
49 MockStateTransitionListener* transition_listener =
50 new MockStateTransitionListener();
51 SecAggClientCompletedState completed_state(
52 std::unique_ptr<SendToServerInterface>{sender},
53 std::unique_ptr<MockStateTransitionListener>{transition_listener});
54 EXPECT_THAT(completed_state.IsCompletedSuccessfully(), Eq(true));
55 }
56
TEST(SecAggClientCompletedStateTest,ErrorMessageRaisesErrorStatus)57 TEST(SecAggClientCompletedStateTest, ErrorMessageRaisesErrorStatus) {
58 MockSendToServerInterface* sender = new MockSendToServerInterface();
59 MockStateTransitionListener* transition_listener =
60 new MockStateTransitionListener();
61 SecAggClientCompletedState completed_state(
62 std::unique_ptr<SendToServerInterface>{sender},
63 std::unique_ptr<MockStateTransitionListener>{transition_listener});
64 EXPECT_THAT(completed_state.ErrorMessage().ok(), Eq(false));
65 }
66
TEST(SecAggClientCompletedStateTest,StartRaisesErrorStatus)67 TEST(SecAggClientCompletedStateTest, StartRaisesErrorStatus) {
68 MockSendToServerInterface* sender = new MockSendToServerInterface();
69 MockStateTransitionListener* transition_listener =
70 new MockStateTransitionListener();
71 SecAggClientCompletedState completed_state(
72 std::unique_ptr<SendToServerInterface>{sender},
73 std::unique_ptr<MockStateTransitionListener>{transition_listener});
74 EXPECT_THAT(completed_state.Start().ok(), Eq(false));
75 }
76
TEST(SecAggClientCompletedStateTest,HandleMessageRaisesErrorStatus)77 TEST(SecAggClientCompletedStateTest, HandleMessageRaisesErrorStatus) {
78 MockSendToServerInterface* sender = new MockSendToServerInterface();
79 MockStateTransitionListener* transition_listener =
80 new MockStateTransitionListener();
81 SecAggClientCompletedState completed_state(
82 std::unique_ptr<SendToServerInterface>{sender},
83 std::unique_ptr<MockStateTransitionListener>{transition_listener});
84 EXPECT_THAT(
85 completed_state
86 .HandleMessage(ServerToClientWrapperMessage::default_instance())
87 .ok(),
88 Eq(false));
89 }
90
TEST(SecAggClientCompletedStateTest,SetInputRaisesErrorStatus)91 TEST(SecAggClientCompletedStateTest, SetInputRaisesErrorStatus) {
92 MockSendToServerInterface* sender = new MockSendToServerInterface();
93 MockStateTransitionListener* transition_listener =
94 new MockStateTransitionListener();
95 SecAggClientCompletedState completed_state(
96 std::unique_ptr<SendToServerInterface>{sender},
97 std::unique_ptr<MockStateTransitionListener>{transition_listener});
98 EXPECT_THAT(
99 completed_state.SetInput(std::make_unique<SecAggVectorMap>()).ok(),
100 Eq(false));
101 }
102
TEST(SecAggClientCompletedStateTest,AbortRaisesErrorStatus)103 TEST(SecAggClientCompletedStateTest, AbortRaisesErrorStatus) {
104 MockSendToServerInterface* sender = new MockSendToServerInterface();
105 MockStateTransitionListener* transition_listener =
106 new MockStateTransitionListener();
107 SecAggClientCompletedState completed_state(
108 std::unique_ptr<SendToServerInterface>{sender},
109 std::unique_ptr<MockStateTransitionListener>{transition_listener});
110 EXPECT_THAT(completed_state.Abort("incorrect abort").ok(), Eq(false));
111 }
112
113 } // namespace
114 } // namespace secagg
115 } // namespace fcp
116