1 /*
2 * Copyright (C) 2023 The Android Open Source Project
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 "host/commands/cvd/unittests/selector/cvd_flags_helper.h"
18
19 namespace cuttlefish {
20
TEST_F(CvdFlagCollectionTest,Init)21 TEST_F(CvdFlagCollectionTest, Init) {
22 auto output_result = flag_collection_.FilterFlags(input_);
23 ASSERT_TRUE(output_result.ok()) << output_result.error().Trace();
24 }
25
TEST_F(CvdFlagCollectionTest,Leftover)26 TEST_F(CvdFlagCollectionTest, Leftover) {
27 auto output_result = flag_collection_.FilterFlags(input_);
28 ASSERT_TRUE(output_result.ok()) << output_result.error().Trace();
29 ASSERT_EQ(input_, cvd_common::Args{"--not_consumed"});
30 }
31
TEST_F(CvdFlagCollectionTest,AllGivenFlagsListed)32 TEST_F(CvdFlagCollectionTest, AllGivenFlagsListed) {
33 auto output_result = flag_collection_.FilterFlags(input_);
34 ASSERT_TRUE(output_result.ok()) << output_result.error().Trace();
35 ASSERT_EQ(input_, cvd_common::Args{"--not_consumed"});
36 auto output = std::move(*output_result);
37
38 ASSERT_FALSE(Contains(output, "help"));
39 ASSERT_TRUE(Contains(output, "name"));
40 ASSERT_TRUE(Contains(output, "enable_vnc"));
41 ASSERT_TRUE(Contains(output, "id"));
42 ASSERT_FALSE(Contains(output, "not-given"));
43 ASSERT_FALSE(Contains(output, "not-consumed"));
44 }
45
TEST_F(CvdFlagCollectionTest,DefaultValueFlagsAlsoListed)46 TEST_F(CvdFlagCollectionTest, DefaultValueFlagsAlsoListed) {
47 auto output_result = flag_collection_.CalculateFlags(input_);
48 ASSERT_TRUE(output_result.ok()) << output_result.error().Trace();
49 ASSERT_EQ(input_, cvd_common::Args{"--not_consumed"});
50 auto output = std::move(*output_result);
51
52 ASSERT_TRUE(Contains(output, "help"));
53 ASSERT_TRUE(Contains(output, "name"));
54 ASSERT_TRUE(Contains(output, "enable_vnc"));
55 ASSERT_TRUE(Contains(output, "id"));
56 ASSERT_FALSE(Contains(output, "not-given"));
57 ASSERT_FALSE(Contains(output, "not-consumed"));
58 }
59
TEST_F(CvdFlagCollectionTest,ValueTest)60 TEST_F(CvdFlagCollectionTest, ValueTest) {
61 auto output_result = flag_collection_.CalculateFlags(input_);
62 ASSERT_TRUE(output_result.ok()) << output_result.error().Trace();
63 auto output = std::move(*output_result);
64 // without these verified, the code below will crash
65 ASSERT_TRUE(Contains(output, "help"));
66 ASSERT_TRUE(Contains(output, "name"));
67 ASSERT_TRUE(Contains(output, "enable_vnc"));
68 ASSERT_TRUE(Contains(output, "id"));
69 const auto help_output = output.at("help");
70 const auto name_output = output.at("name");
71 const auto enable_vnc_output = output.at("enable_vnc");
72 const auto id_output = output.at("id");
73
74 auto help_value_result = FlagCollection::GetValue<bool>(help_output.value);
75 auto name_value_result =
76 FlagCollection::GetValue<std::string>(name_output.value);
77 auto enable_vnc_value_result =
78 FlagCollection::GetValue<bool>(enable_vnc_output.value);
79 auto id_value_result =
80 FlagCollection::GetValue<std::int32_t>(id_output.value);
81
82 ASSERT_TRUE(help_value_result.ok());
83 ASSERT_TRUE(name_value_result.ok());
84 ASSERT_TRUE(enable_vnc_value_result.ok());
85 ASSERT_TRUE(id_value_result.ok());
86 ASSERT_EQ(*help_value_result, false);
87 ASSERT_EQ(*name_value_result, "foo");
88 ASSERT_EQ(*enable_vnc_value_result, true);
89 ASSERT_EQ(*id_value_result, 9);
90 }
91
TEST(CvdFlagTest,FlagProxyFilter)92 TEST(CvdFlagTest, FlagProxyFilter) {
93 CvdFlag<std::string> no_default("no_default");
94 cvd_common::Args has_flag_args{"--no_default=Hello"};
95 cvd_common::Args not_has_flag_args{"--bar --foo=name --enable_vnc"};
96 cvd_common::Args empty_args{""};
97
98 CvdFlagProxy no_default_proxy(std::move(no_default));
99 auto expected_hello_opt_result = no_default_proxy.FilterFlag(has_flag_args);
100 auto expected_null_result = no_default_proxy.FilterFlag(not_has_flag_args);
101 auto expected_null_result2 = no_default_proxy.FilterFlag(empty_args);
102
103 ASSERT_TRUE(expected_hello_opt_result.ok());
104 ASSERT_TRUE(expected_null_result.ok());
105 ASSERT_TRUE(expected_null_result2.ok());
106
107 ASSERT_TRUE(*expected_hello_opt_result);
108 auto value_result = Get<std::string>(**expected_hello_opt_result);
109 ASSERT_TRUE(value_result.ok());
110 ASSERT_EQ(*value_result, "Hello");
111 ASSERT_FALSE(*expected_null_result);
112 ASSERT_FALSE(*expected_null_result2);
113
114 ASSERT_TRUE(has_flag_args.empty());
115 ASSERT_EQ(not_has_flag_args,
116 cvd_common::Args{"--bar --foo=name --enable_vnc"});
117 }
118
119 } // namespace cuttlefish
120