1 //
2 // Copyright (C) 2022 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 #include <sys/types.h>
17 #include <unistd.h>
18
19 #include "host/commands/cvd/unittests/selector/parser_names_helper.h"
20
21 namespace cuttlefish {
22 namespace selector {
23
TEST_P(ValidNamesTest,ValidInputs)24 TEST_P(ValidNamesTest, ValidInputs) {
25 const uid_t uid = getuid();
26 auto parser = StartSelectorParser::ConductSelectFlagsParser(
27 uid, selector_args_, cvd_common::Args{}, cvd_common::Envs{});
28
29 ASSERT_TRUE(parser.ok());
30 }
31
32 /**
33 * Note that invalid inputs must be tested at the InstanceDatabase level
34 */
TEST_P(ValidNamesTest,FieldsNoSubstring)35 TEST_P(ValidNamesTest, FieldsNoSubstring) {
36 const uid_t uid = getuid();
37
38 auto parser = StartSelectorParser::ConductSelectFlagsParser(
39 uid, selector_args_, cvd_common::Args{}, cvd_common::Envs{});
40
41 ASSERT_TRUE(parser.ok());
42 ASSERT_EQ(parser->GroupName(), expected_output_.group_name);
43 ASSERT_EQ(parser->PerInstanceNames(), expected_output_.per_instance_names);
44 }
45
46 INSTANTIATE_TEST_SUITE_P(
47 CvdParser, ValidNamesTest,
48 testing::Values(
49 InputOutput{.input = "--group_name=cf",
50 .expected = ExpectedOutput{.group_name = "cf"}},
51 InputOutput{.input = "--instance_name=cvd,cf",
52 .expected = ExpectedOutput{.per_instance_names =
53 std::vector<std::string>{
54 "cvd", "cf"}}},
55 InputOutput{.input = "--instance_name=09-1,tv-2 --group_name cf",
56 .expected = ExpectedOutput{.group_name = "cf",
57 .per_instance_names =
58 std::vector<std::string>{
59 "09-1", "tv-2"}}},
60 InputOutput{
61 .input = "--group_name=cf --instance_name 09",
62 .expected = ExpectedOutput{.group_name = "cf",
63 .per_instance_names =
64 std::vector<std::string>{"09"}}},
65 InputOutput{.input = "--group_name=my_cool --instance_name=phone-1,tv",
66 .expected = ExpectedOutput{.group_name = "my_cool",
67 .per_instance_names =
68 std::vector<std::string>{
69 "phone-1", "tv"}}},
70 InputOutput{
71 .input = "--instance_name=my-cool",
72 .expected = ExpectedOutput{
73 .per_instance_names = std::vector<std::string>{"my-cool"}}}));
74
TEST_P(InvalidNamesTest,InvalidInputs)75 TEST_P(InvalidNamesTest, InvalidInputs) {
76 const uid_t uid = getuid();
77
78 auto parser = StartSelectorParser::ConductSelectFlagsParser(
79 uid, selector_args_, cvd_common::Args{}, cvd_common::Envs{});
80
81 ASSERT_FALSE(parser.ok());
82 }
83
84 INSTANTIATE_TEST_SUITE_P(CvdParser, InvalidNamesTest,
85 testing::Values("--group_name", "--group_name=?34",
86 "--group_name=ab-cd",
87 "--group_name=3a", "--instance_name",
88 "--instance_name=*7a"));
89
90 } // namespace selector
91 } // namespace cuttlefish
92