• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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