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 #include <random>
17 #include <string>
18 #include <vector>
19
20 #include <gtest/gtest.h>
21
22 #include "common/libs/utils/contains.h"
23 #include "host/commands/cvd/types.h"
24 #include "host/commands/cvd/unittests/server/local_instance_helper.h"
25
26 namespace cuttlefish {
27 namespace acloud {
28
TEST(CvdDriver,CvdLocalInstance)29 TEST(CvdDriver, CvdLocalInstance) {
30 cvd_common::Envs envs;
31 CmdRunner::Run("cvd reset -y", envs);
32
33 // 1st test normal case
34 auto cmd_local_instance_local_image =
35 CmdRunner::Run("cvd acloud create --local-instance --local-image", envs);
36 ASSERT_TRUE(cmd_local_instance_local_image.Success())
37 << cmd_local_instance_local_image.Stderr();
38 auto cmd_stop = CmdRunner::Run("cvd stop", envs);
39 ASSERT_TRUE(cmd_stop.Success()) << cmd_stop.Stderr();
40
41 // 2nd test random id input
42 std::random_device rd;
43 std::default_random_engine mt(rd());
44 std::uniform_int_distribution<int> dist(1, 10);
45
46 // randomly generate instance id within 1-10, id 0 has been used
47 std::string id = std::to_string(dist(mt));
48 std::string cmd_str = "cvd acloud create --local-instance " + id;
49 cmd_str += " --local-image";
50 auto cmd_id = CmdRunner::Run(cmd_str, envs);
51 ASSERT_TRUE(cmd_id.Success()) << cmd_id.Stderr();
52
53 auto cmd_fleet = CmdRunner::Run("cvd fleet", envs);
54 ASSERT_TRUE(cmd_fleet.Success()) << cmd_fleet.Stderr();
55 ASSERT_TRUE(Contains(cmd_fleet.Stdout(), "cvd-" + id));
56
57 cmd_stop = CmdRunner::Run("cvd stop", envs);
58 ASSERT_TRUE(cmd_stop.Success()) << cmd_stop.Stderr();
59
60 cmd_fleet = CmdRunner::Run("cvd fleet", envs);
61 ASSERT_TRUE(cmd_fleet.Success()) << cmd_fleet.Stderr();
62 ASSERT_FALSE(Contains(cmd_fleet.Stdout(), "cvd-" + id));
63
64 // 3rd test local instance --local-boot-image
65 const auto product_out_dir = StringFromEnv("ANDROID_PRODUCT_OUT", "");
66 cmd_str =
67 "cvd acloud create --local-instance --local-image --local-boot-image " +
68 product_out_dir;
69 cmd_str += "/boot.img";
70 auto cmd_local_boot_image = CmdRunner::Run(cmd_str, envs);
71 ASSERT_TRUE(cmd_local_boot_image.Success()) << cmd_local_boot_image.Stderr();
72 cmd_stop = CmdRunner::Run("cvd stop", envs);
73 ASSERT_TRUE(cmd_stop.Success()) << cmd_stop.Stderr();
74
75 // clean up for the next test
76 CmdRunner::Run("cvd reset -y", envs);
77 }
78
TEST_F(CvdInstanceLocalTest,CvdLocalInstanceRemoteImage)79 TEST_F(CvdInstanceLocalTest, CvdLocalInstanceRemoteImage) {
80 // 4th test local instance, remote image, --branch, --build-id flags
81 auto cmd_result = Execute("cvd acloud create --local-instance --build-id "
82 "9759836 --branch git_master --build-target cf_x86_64_phone-userdebug "
83 "--bootloader-branch aosp_u-boot-mainline --bootloader-build-id "
84 "9602025 --bootloader-build-target u-boot_crosvm_x86_64");
85 ASSERT_TRUE(cmd_result.Success()) << cmd_result.Stderr();
86 }
87
TEST(CvdDriver,CvdLocalInstanceRemoteImageKernelImage)88 TEST(CvdDriver, CvdLocalInstanceRemoteImageKernelImage) {
89 cvd_common::Envs envs;
90 CmdRunner::Run("cvd reset -y", envs);
91
92 // 5th test local instance, remote image, --kernel-branch, --kernel-build-id,
93 // --kernel-build-target, --image-download-dir --build-target flags
94 auto cmd_kernel_build = CmdRunner::Run(
95 "cvd acloud create --local-instance --branch "
96 "git_master --build-target cf_x86_64_phone-userdebug --kernel-branch "
97 "aosp_kernel-common-android13-5.10 --kernel-build-id 9600402 "
98 "--kernel-build-target kernel_virt_x86_64 --image-download-dir "
99 "/tmp/acloud_cvd_temp/test123",
100 envs);
101 ASSERT_TRUE(cmd_kernel_build.Success()) << cmd_kernel_build.Stderr();
102 auto cmd_stop = CmdRunner::Run("cvd stop", envs);
103 // after this command, the 5.10 kernel image should be downloaded at
104 // /tmp/acloud_cvd_temp/test123/acloud_image_artifacts/9594220cf_x86_64_phone-userdebug
105 // I will re-use this pre-built kernel image for later testing
106
107 // 6th test local instance, local-kernel-image, --branch
108 auto cmd_local_kernel_image = CmdRunner::Run(
109 "cvd acloud create --local-instance --branch git_master --build-target "
110 "cf_x86_64_phone-userdebug --local-kernel-image "
111 "/tmp/acloud_cvd_temp/test123/acloud_image_artifacts/"
112 "9695745cf_x86_64_phone-userdebug",
113 envs);
114 ASSERT_TRUE(cmd_local_kernel_image.Success())
115 << cmd_local_kernel_image.Stderr();
116 cmd_stop = CmdRunner::Run("cvd stop", envs);
117
118 // clean up for the next test
119 CmdRunner::Run("cvd reset -y", envs);
120 }
121
122 // CvdInstanceLocalTest is testing different flags with "cvd acloud create --local-instance"
TEST_F(CvdInstanceLocalTest,CvdLocalInstanceRemoteImageBootloader)123 TEST_F(CvdInstanceLocalTest, CvdLocalInstanceRemoteImageBootloader) {
124 // 7th test --bootloader-branch --bootloader-build-id
125 // --bootloader-build-target
126 auto cmd_result = Execute("cvd acloud create --local-instance "
127 "--branch git_master --build-target cf_x86_64_phone-userdebug "
128 "--bootloader-branch aosp_u-boot-mainline --bootloader-build-id 9602025 "
129 "--bootloader-build-target u-boot_crosvm_x86_64");
130 ASSERT_TRUE(cmd_result.Success()) << cmd_result.Stderr();
131 }
132
TEST_F(CvdInstanceLocalTest,CvdLocalInstanceRemoteImageSystem)133 TEST_F(CvdInstanceLocalTest, CvdLocalInstanceRemoteImageSystem) {
134 // 8th --system-branch, --system-build-id, --system-build-target
135 auto cmd_result = Execute("cvd acloud create --local-instance --branch git_master "
136 "--build-target cf_x86_64_phone-userdebug --system-branch git_master "
137 "--system-build-id 9684420 --system-build-target aosp_x86_64-userdebug");
138 ASSERT_TRUE(cmd_result.Success()) << cmd_result.Stderr();
139 }
140
141 } // namespace acloud
142 } // namespace cuttlefish
143