Android-cuttlefish cvd tool
|
Namespaces | |
namespace | anonymous_namespace{creation_analyzer.cpp} |
namespace | anonymous_namespace{creation_analyzer_helper.cpp} |
namespace | anonymous_namespace{creation_analyzer_test.cpp} |
namespace | anonymous_namespace{instance_database_helper.cpp} |
namespace | anonymous_namespace{selector.cpp} |
namespace | anonymous_namespace{start_selector_parser.cpp} |
Classes | |
struct | CreationAnalyzerParam |
class | CreationInfoGenTest |
class | CvdInstanceDatabaseTest |
class | CvdInstanceGroupUnitTest |
struct | Expected |
struct | ExpectedOutput |
struct | GroupCreationInfo |
class | HomeTest |
class | HostArtifactsTest |
struct | InputOutput |
class | InstanceIdTest |
struct | InstanceIdTestInput |
class | InvalidNamesTest |
class | InvalidSubCmdTest |
struct | OutputInfo |
struct | PerInstanceInfo |
class | SelectorFlags |
struct | SelectorOptions |
struct | SeparatedArguments |
class | StartSelectorParser |
class | ValidNamesTest |
class | ValidSubCmdTest |
Typedefs | |
using | CvdInstanceDatabaseJsonTest = CvdInstanceDatabaseTest |
Functions | |
Result< SeparatedArguments > | SeparateArguments (const std::vector< std::string > &input_args) |
Result< GroupCreationInfo > | AnalyzeCreation (const CreationAnalyzerParam ¶ms, InstanceLockFileManager &lock_file_manager) |
TEST_P (HomeTest, HomeTest) | |
INSTANTIATE_TEST_SUITE_P (CvdCreationInfo, HomeTest, home_test_inputs) | |
TEST_P (HostArtifactsTest, HostArtifactsTest) | |
INSTANTIATE_TEST_SUITE_P (CvdCreationInfo, HostArtifactsTest, host_out_test_inputs) | |
TEST_P (InvalidSubCmdTest, InvalidSubCmdTest) | |
INSTANTIATE_TEST_SUITE_P (CvdCreationInfo, InvalidSubCmdTest, invalid_sub_cmd_test_inputs) | |
TEST_P (ValidSubCmdTest, ValidSubCmdTest) | |
INSTANTIATE_TEST_SUITE_P (CvdCreationInfo, ValidSubCmdTest, valid_sub_cmd_test_inputs) | |
TEST (AutoHomeTest, DefaultFailAtSecondTrialTest) | |
TEST (AutoHomeTest, DefaultFollowedByNonDefaultTest) | |
std::optional< std::string > | OverridenHomeDirectory (const cvd_common::Envs &env) |
TEST_P (InstanceIdTest, InstanceIdCalculation) | |
INSTANTIATE_TEST_SUITE_P (CvdParser, InstanceIdTest, testing::Values(InstanceIdTestInput{.cuttlefish_instance=std::nullopt,.expected_ids=std::nullopt,.requested_num_instances=1,.expected_result=true}, InstanceIdTestInput{.cuttlefish_instance="8",.expected_ids=std::vector< unsigned >{8},.requested_num_instances=1,.expected_result=true}, InstanceIdTestInput{.cmd_args="--num_instances=2",.expected_ids=std::nullopt,.requested_num_instances=2,.expected_result=true}, InstanceIdTestInput{.cmd_args="--num_instances=2",.cuttlefish_instance="8",.expected_ids=std::vector< unsigned >{8, 9},.requested_num_instances=2,.expected_result=true}, InstanceIdTestInput{ .cmd_args="--base_instance_num=10 --num_instances=2",.cuttlefish_instance="8",.expected_ids=std::vector< unsigned >{10, 11},.requested_num_instances=2,.expected_result=true}, InstanceIdTestInput{.cmd_args="--instance_nums 2",.cuttlefish_instance=std::nullopt,.expected_ids=std::vector< unsigned >{2},.requested_num_instances=1,.expected_result=true}, InstanceIdTestInput{.cmd_args="--instance_nums 2,5,6",.cuttlefish_instance=std::nullopt,.expected_ids=std::vector< unsigned >{2, 5, 6},.requested_num_instances=3,.expected_result=true}, InstanceIdTestInput{ .cmd_args="--instance_nums 2,5,6 --num_instances=3",.cuttlefish_instance=std::nullopt,.expected_ids=std::vector< unsigned >{2, 5, 6},.requested_num_instances=3,.expected_result=true}, InstanceIdTestInput{ .cmd_args="--instance_nums 2,5,6 --num_instances=3",.selector_args="--instance_name=c-1,c-3,c-5",.cuttlefish_instance=std::nullopt,.expected_ids=std::vector< unsigned >{2, 5, 6},.requested_num_instances=3,.expected_result=true}, InstanceIdTestInput{.selector_args="--instance_name=c-1,c-3,c-5",.cuttlefish_instance=std::nullopt,.expected_ids=std::nullopt,.requested_num_instances=3,.expected_result=true}, InstanceIdTestInput{ .cmd_args="--instance_nums 2,5,6 --num_instances=3",.cuttlefish_instance="8",.expected_ids=std::vector< unsigned >{2, 5, 6},.requested_num_instances=3,.expected_result=true}, InstanceIdTestInput{ .cmd_args="--instance_nums 2,5,6 --num_instances=7",.cuttlefish_instance=std::nullopt,.expected_ids=std::vector< unsigned >{2, 5, 6},.requested_num_instances=3,.expected_result=false}, InstanceIdTestInput{ .cmd_args="--num_instances=3 --instance_nums 2,5,6",.selector_args="--instance_name=c-1,c-3",.cuttlefish_instance=std::nullopt,.expected_ids=std::vector< unsigned >{2, 5, 6},.requested_num_instances=3,.expected_result=false}, InstanceIdTestInput{ .cmd_args="--instance_nums 2,5,6 --base_instance_num=7",.cuttlefish_instance=std::nullopt,.expected_ids=std::vector< unsigned >{2, 5, 6},.requested_num_instances=3,.expected_result=false})) | |
TEST_P (ValidNamesTest, ValidInputs) | |
TEST_P (ValidNamesTest, FieldsNoSubstring) | |
INSTANTIATE_TEST_SUITE_P (CvdParser, ValidNamesTest, testing::Values(InputOutput{.input="--group_name=cf",.expected=ExpectedOutput{.group_name="cf"}}, InputOutput{.input="--instance_name=cvd,cf",.expected=ExpectedOutput{.per_instance_names=std::vector< std::string >{ "cvd", "cf"}}}, InputOutput{.input="--instance_name=09-1,tv-2 --group_name cf",.expected=ExpectedOutput{.group_name="cf",.per_instance_names=std::vector< std::string >{ "09-1", "tv-2"}}}, InputOutput{ .input="--group_name=cf --instance_name 09",.expected=ExpectedOutput{.group_name="cf",.per_instance_names=std::vector< std::string >{"09"}}}, InputOutput{.input="--group_name=my_cool --instance_name=phone-1,tv",.expected=ExpectedOutput{.group_name="my_cool",.per_instance_names=std::vector< std::string >{ "phone-1", "tv"}}}, InputOutput{ .input="--instance_name=my-cool",.expected=ExpectedOutput{ .per_instance_names=std::vector< std::string >{"my-cool"}}})) | |
TEST_P (InvalidNamesTest, InvalidInputs) | |
INSTANTIATE_TEST_SUITE_P (CvdParser, InvalidNamesTest, testing::Values("--group_name", "--group_name=?34", "--group_name=ab-cd", "--group_name=3a", "--instance_name", "--instance_name=*7a")) | |
Result< LocalInstanceGroup > | SelectGroup (const InstanceManager &instance_manager, const CommandRequest &request) |
Result< std::pair< LocalInstance, LocalInstanceGroup > > | SelectInstance (const InstanceManager &instance_manager, const CommandRequest &request) |
Result< std::string > | HandleGroupName (const std::string &group_name) |
Result< std::vector< std::string > > | HandleInstanceNames (const std::string &per_instance_names) |
Result< SelectorOptions > | HandleNameOpts (const std::optional< std::string > &group_name, const std::optional< std::string > &instance_names) |
Result< SelectorOptions > | ParseCommonSelectorArguments (cvd_common::Args &args) |
Result< std::vector< std::string > > | SeparateButWithNoEmptyToken (const std::string &input, const std::string &delimiter) |
template<typename T > | |
Result< void > | FilterSelectorFlag (std::vector< std::string > &args, const std::string &flag_name, std::optional< T > &value_opt) |
static bool | Unique (const std::vector< unsigned > &v) |
static Result< unsigned > | ParseNaturalNumber (const std::string &token) |
static Result< std::vector< unsigned > > | ParseInstanceNums (const std::string &instance_nums_flag) |
static std::string | GroupName () |
static std::string | HomeDir () |
static std::string | TestBinDir () |
TEST_F (CvdInstanceGroupUnitTest, AddInstancesAndListAll) | |
TEST_F (CvdInstanceGroupUnitTest, SearchById) | |
cvd::Instance | InstanceProto (unsigned id, const std::string &name) |
cvd::InstanceGroup | GroupProtoWithInstances (const std::string &name, const std::string &home_dir, const std::string &host_path, const std::string &product_path, const std::vector< std::pair< unsigned, std::string > > &instances) |
TEST_F (CvdInstanceDatabaseTest, Empty) | |
TEST_F (CvdInstanceDatabaseTest, AddWithInvalidGroupInfo) | |
TEST_F (CvdInstanceDatabaseTest, AddWithValidGroupInfo) | |
TEST_F (CvdInstanceDatabaseTest, AddToTakenHome) | |
TEST_F (CvdInstanceDatabaseTest, Clear) | |
TEST_F (CvdInstanceDatabaseTest, SearchGroups) | |
TEST_F (CvdInstanceDatabaseTest, RemoveGroup) | |
TEST_F (CvdInstanceDatabaseTest, AddInstances) | |
TEST_F (CvdInstanceDatabaseTest, AddInstancesInvalid) | |
TEST_F (CvdInstanceDatabaseTest, FindByInstanceId) | |
TEST_F (CvdInstanceDatabaseTest, FindByPerInstanceName) | |
TEST_F (CvdInstanceDatabaseTest, FindGroupByPerInstanceName) | |
TEST_F (CvdInstanceDatabaseTest, AddInstancesTogether) | |
TEST_F (CvdInstanceDatabaseJsonTest, DumpLoadDumpCompare) | |
TEST_F (CvdInstanceDatabaseTest, UpdateInstances) | |
TEST (CvdInstanceRecordUnitTest, Fields) | |
Variables | |
static auto | home_test_inputs |
static auto | host_out_test_inputs |
static auto | invalid_sub_cmd_test_inputs |
static auto & | valid_sub_cmd_test_inputs = home_test_inputs |
constexpr char | kGroupNameField [] = "group_name" |
constexpr char | kHomeField [] = "home" |
constexpr char | kInstanceIdField [] = "instance_id" |
constexpr char | kInstanceNameField [] = "instance_name" |
Result< GroupCreationInfo > cuttlefish::selector::AnalyzeCreation | ( | const CreationAnalyzerParam & | , |
InstanceLockFileManager & | |||
) |
Instance IDs: Use the InstanceNumCalculator's logic
HOME directory: If given in envs and is different from the system-wide home, use it If not, try ParentOfAutogeneratedHomes()/uid/${group_name}
host_artifacts_path: ANDROID_HOST_OUT must be given.
Group name: if a group name is not given, automatically generate: default_prefix + "_" + one_of_ids
Per-instance name: When not given, use std::string(id) as the per instance name of each
Number of instances: Controlled by –instance_nums, –num_instances, etc. Also controlled by –instance_name
p.s. dependency: (a-->b means b depends on a) group_name --> HOME instance ids --> per_instance_name
Result< void > cuttlefish::selector::FilterSelectorFlag | ( | std::vector< std::string > & | args, |
const std::string & | flag_name, | ||
std::optional< T > & | value_opt | ||
) |
|
static |
cvd::InstanceGroup cuttlefish::selector::GroupProtoWithInstances | ( | const std::string & | name, |
const std::string & | home_dir, | ||
const std::string & | host_path, | ||
const std::string & | product_path, | ||
const std::vector< std::pair< unsigned, std::string > > & | instances | ||
) |
Result< std::string > cuttlefish::selector::HandleGroupName | ( | const std::string & | group_name | ) |
Result< std::vector< std::string > > cuttlefish::selector::HandleInstanceNames | ( | const std::string & | per_instance_names | ) |
Result< SelectorOptions > cuttlefish::selector::HandleNameOpts | ( | const std::optional< std::string > & | group_name, |
const std::optional< std::string > & | instance_names | ||
) |
|
static |
cvd::Instance cuttlefish::selector::InstanceProto | ( | unsigned | id, |
const std::string & | name | ||
) |
cuttlefish::selector::INSTANTIATE_TEST_SUITE_P | ( | CvdCreationInfo | , |
HomeTest | , | ||
home_test_inputs | |||
) |
cuttlefish::selector::INSTANTIATE_TEST_SUITE_P | ( | CvdCreationInfo | , |
HostArtifactsTest | , | ||
host_out_test_inputs | |||
) |
cuttlefish::selector::INSTANTIATE_TEST_SUITE_P | ( | CvdCreationInfo | , |
InvalidSubCmdTest | , | ||
invalid_sub_cmd_test_inputs | |||
) |
cuttlefish::selector::INSTANTIATE_TEST_SUITE_P | ( | CvdCreationInfo | , |
ValidSubCmdTest | , | ||
valid_sub_cmd_test_inputs | |||
) |
cuttlefish::selector::INSTANTIATE_TEST_SUITE_P | ( | CvdParser | , |
InstanceIdTest | , | ||
testing::Values(InstanceIdTestInput{.cuttlefish_instance=std::nullopt,.expected_ids=std::nullopt,.requested_num_instances=1,.expected_result=true}, InstanceIdTestInput{.cuttlefish_instance="8",.expected_ids=std::vector< unsigned >{8},.requested_num_instances=1,.expected_result=true}, InstanceIdTestInput{.cmd_args="--num_instances=2",.expected_ids=std::nullopt,.requested_num_instances=2,.expected_result=true}, InstanceIdTestInput{.cmd_args="--num_instances=2",.cuttlefish_instance="8",.expected_ids=std::vector< unsigned >{8, 9},.requested_num_instances=2,.expected_result=true}, InstanceIdTestInput{ .cmd_args="--base_instance_num=10 --num_instances=2",.cuttlefish_instance="8",.expected_ids=std::vector< unsigned >{10, 11},.requested_num_instances=2,.expected_result=true}, InstanceIdTestInput{.cmd_args="--instance_nums 2",.cuttlefish_instance=std::nullopt,.expected_ids=std::vector< unsigned >{2},.requested_num_instances=1,.expected_result=true}, InstanceIdTestInput{.cmd_args="--instance_nums 2,5,6",.cuttlefish_instance=std::nullopt,.expected_ids=std::vector< unsigned >{2, 5, 6},.requested_num_instances=3,.expected_result=true}, InstanceIdTestInput{ .cmd_args="--instance_nums 2,5,6 --num_instances=3",.cuttlefish_instance=std::nullopt,.expected_ids=std::vector< unsigned >{2, 5, 6},.requested_num_instances=3,.expected_result=true}, InstanceIdTestInput{ .cmd_args="--instance_nums 2,5,6 --num_instances=3",.selector_args="--instance_name=c-1,c-3,c-5",.cuttlefish_instance=std::nullopt,.expected_ids=std::vector< unsigned >{2, 5, 6},.requested_num_instances=3,.expected_result=true}, InstanceIdTestInput{.selector_args="--instance_name=c-1,c-3,c-5",.cuttlefish_instance=std::nullopt,.expected_ids=std::nullopt,.requested_num_instances=3,.expected_result=true}, InstanceIdTestInput{ .cmd_args="--instance_nums 2,5,6 --num_instances=3",.cuttlefish_instance="8",.expected_ids=std::vector< unsigned >{2, 5, 6},.requested_num_instances=3,.expected_result=true}, InstanceIdTestInput{ .cmd_args="--instance_nums 2,5,6 --num_instances=7",.cuttlefish_instance=std::nullopt,.expected_ids=std::vector< unsigned >{2, 5, 6},.requested_num_instances=3,.expected_result=false}, InstanceIdTestInput{ .cmd_args="--num_instances=3 --instance_nums 2,5,6",.selector_args="--instance_name=c-1,c-3",.cuttlefish_instance=std::nullopt,.expected_ids=std::vector< unsigned >{2, 5, 6},.requested_num_instances=3,.expected_result=false}, InstanceIdTestInput{ .cmd_args="--instance_nums 2,5,6 --base_instance_num=7",.cuttlefish_instance=std::nullopt,.expected_ids=std::vector< unsigned >{2, 5, 6},.requested_num_instances=3,.expected_result=false}) | |||
) |
cuttlefish::selector::INSTANTIATE_TEST_SUITE_P | ( | CvdParser | , |
InvalidNamesTest | , | ||
testing::Values("--group_name", "--group_name=?34", "--group_name=ab-cd", "--group_name=3a", "--instance_name", "--instance_name=*7a") | |||
) |
cuttlefish::selector::INSTANTIATE_TEST_SUITE_P | ( | CvdParser | , |
ValidNamesTest | , | ||
testing::Values(InputOutput{.input="--group_name=cf",.expected=ExpectedOutput{.group_name="cf"}}, InputOutput{.input="--instance_name=cvd,cf",.expected=ExpectedOutput{.per_instance_names=std::vector< std::string >{ "cvd", "cf"}}}, InputOutput{.input="--instance_name=09-1,tv-2 --group_name cf",.expected=ExpectedOutput{.group_name="cf",.per_instance_names=std::vector< std::string >{ "09-1", "tv-2"}}}, InputOutput{ .input="--group_name=cf --instance_name 09",.expected=ExpectedOutput{.group_name="cf",.per_instance_names=std::vector< std::string >{"09"}}}, InputOutput{.input="--group_name=my_cool --instance_name=phone-1,tv",.expected=ExpectedOutput{.group_name="my_cool",.per_instance_names=std::vector< std::string >{ "phone-1", "tv"}}}, InputOutput{ .input="--instance_name=my-cool",.expected=ExpectedOutput{ .per_instance_names=std::vector< std::string >{"my-cool"}}}) | |||
) |
std::optional< std::string > cuttlefish::selector::OverridenHomeDirectory | ( | const cvd_common::Envs & | env | ) |
Result< SelectorOptions > cuttlefish::selector::ParseCommonSelectorArguments | ( | cvd_common::Args & | args | ) |
|
static |
|
static |
Result< LocalInstanceGroup > cuttlefish::selector::SelectGroup | ( | const InstanceManager & | instance_manager, |
const CommandRequest & | request | ||
) |
Result< std::pair< LocalInstance, LocalInstanceGroup > > cuttlefish::selector::SelectInstance | ( | const InstanceManager & | instance_manager, |
const CommandRequest & | request | ||
) |
Result< SeparatedArguments > cuttlefish::selector::SeparateArguments | ( | const std::vector< std::string > & | input_args | ) |
The very first parser for cmdline that separates:
Note that the user's command line arguments are in this order: $ program_path/name <optional cvd-specific flags> \ subcmd <optional subcmd arguments>
For the parser's sake, there are is another rule.
E.g. cvd –clean start –have –some –args – a b c d e – is basically for subcommands. cvd itself does not use it. If – is within cvd arguments, it is ill-formatted. If it is within subcommands arguments, we simply forward it to the subtool as is.
Result< std::vector< std::string > > cuttlefish::selector::SeparateButWithNoEmptyToken | ( | const std::string & | input, |
const std::string & | delimiter | ||
) |
cuttlefish::selector::TEST | ( | AutoHomeTest | , |
DefaultFailAtSecondTrialTest | |||
) |
cuttlefish::selector::TEST | ( | AutoHomeTest | , |
DefaultFollowedByNonDefaultTest | |||
) |
cuttlefish::selector::TEST | ( | CvdInstanceRecordUnitTest | , |
Fields | |||
) |
Note that invalid inputs must be tested at the InstanceDatabase level
cuttlefish::selector::TEST_F | ( | CvdInstanceDatabaseJsonTest | , |
DumpLoadDumpCompare | |||
) |
cuttlefish::selector::TEST_F | ( | CvdInstanceDatabaseTest | , |
AddInstances | |||
) |
cuttlefish::selector::TEST_F | ( | CvdInstanceDatabaseTest | , |
AddInstancesInvalid | |||
) |
cuttlefish::selector::TEST_F | ( | CvdInstanceDatabaseTest | , |
AddInstancesTogether | |||
) |
cuttlefish::selector::TEST_F | ( | CvdInstanceDatabaseTest | , |
AddToTakenHome | |||
) |
cuttlefish::selector::TEST_F | ( | CvdInstanceDatabaseTest | , |
AddWithInvalidGroupInfo | |||
) |
cuttlefish::selector::TEST_F | ( | CvdInstanceDatabaseTest | , |
AddWithValidGroupInfo | |||
) |
cuttlefish::selector::TEST_F | ( | CvdInstanceDatabaseTest | , |
Clear | |||
) |
cuttlefish::selector::TEST_F | ( | CvdInstanceDatabaseTest | , |
Empty | |||
) |
cuttlefish::selector::TEST_F | ( | CvdInstanceDatabaseTest | , |
FindByInstanceId | |||
) |
cuttlefish::selector::TEST_F | ( | CvdInstanceDatabaseTest | , |
FindByPerInstanceName | |||
) |
cuttlefish::selector::TEST_F | ( | CvdInstanceDatabaseTest | , |
FindGroupByPerInstanceName | |||
) |
cuttlefish::selector::TEST_F | ( | CvdInstanceDatabaseTest | , |
RemoveGroup | |||
) |
cuttlefish::selector::TEST_F | ( | CvdInstanceDatabaseTest | , |
SearchGroups | |||
) |
cuttlefish::selector::TEST_F | ( | CvdInstanceDatabaseTest | , |
UpdateInstances | |||
) |
cuttlefish::selector::TEST_F | ( | CvdInstanceGroupUnitTest | , |
AddInstancesAndListAll | |||
) |
cuttlefish::selector::TEST_F | ( | CvdInstanceGroupUnitTest | , |
SearchById | |||
) |
cuttlefish::selector::TEST_P | ( | HostArtifactsTest | , |
HostArtifactsTest | |||
) |
cuttlefish::selector::TEST_P | ( | InstanceIdTest | , |
InstanceIdCalculation | |||
) |
cuttlefish::selector::TEST_P | ( | InvalidNamesTest | , |
InvalidInputs | |||
) |
cuttlefish::selector::TEST_P | ( | InvalidSubCmdTest | , |
InvalidSubCmdTest | |||
) |
cuttlefish::selector::TEST_P | ( | ValidNamesTest | , |
FieldsNoSubstring | |||
) |
Note that invalid inputs must be tested at the InstanceDatabase level
cuttlefish::selector::TEST_P | ( | ValidNamesTest | , |
ValidInputs | |||
) |
cuttlefish::selector::TEST_P | ( | ValidSubCmdTest | , |
ValidSubCmdTest | |||
) |
|
static |
|
static |
|
static |
|
static |
|
static |
|
constexpr |
|
constexpr |
|
constexpr |
|
constexpr |
|
static |