• 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 #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