1*333d2b36SAndroid Build Coastguard Worker// Copyright 2020 Google Inc. All rights reserved. 2*333d2b36SAndroid Build Coastguard Worker// 3*333d2b36SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License"); 4*333d2b36SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License. 5*333d2b36SAndroid Build Coastguard Worker// You may obtain a copy of the License at 6*333d2b36SAndroid Build Coastguard Worker// 7*333d2b36SAndroid Build Coastguard Worker// http://www.apache.org/licenses/LICENSE-2.0 8*333d2b36SAndroid Build Coastguard Worker// 9*333d2b36SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software 10*333d2b36SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS, 11*333d2b36SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*333d2b36SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and 13*333d2b36SAndroid Build Coastguard Worker// limitations under the License. 14*333d2b36SAndroid Build Coastguard Worker 15*333d2b36SAndroid Build Coastguard Workerpackage remoteexec 16*333d2b36SAndroid Build Coastguard Worker 17*333d2b36SAndroid Build Coastguard Workerimport ( 18*333d2b36SAndroid Build Coastguard Worker "fmt" 19*333d2b36SAndroid Build Coastguard Worker "testing" 20*333d2b36SAndroid Build Coastguard Worker) 21*333d2b36SAndroid Build Coastguard Worker 22*333d2b36SAndroid Build Coastguard Workerfunc TestTemplate(t *testing.T) { 23*333d2b36SAndroid Build Coastguard Worker tests := []struct { 24*333d2b36SAndroid Build Coastguard Worker name string 25*333d2b36SAndroid Build Coastguard Worker params *REParams 26*333d2b36SAndroid Build Coastguard Worker want string 27*333d2b36SAndroid Build Coastguard Worker }{ 28*333d2b36SAndroid Build Coastguard Worker { 29*333d2b36SAndroid Build Coastguard Worker name: "basic", 30*333d2b36SAndroid Build Coastguard Worker params: &REParams{ 31*333d2b36SAndroid Build Coastguard Worker Labels: map[string]string{"type": "compile", "lang": "cpp", "compiler": "clang"}, 32*333d2b36SAndroid Build Coastguard Worker Inputs: []string{"$in"}, 33*333d2b36SAndroid Build Coastguard Worker OutputFiles: []string{"$out"}, 34*333d2b36SAndroid Build Coastguard Worker Platform: map[string]string{ 35*333d2b36SAndroid Build Coastguard Worker ContainerImageKey: DefaultImage, 36*333d2b36SAndroid Build Coastguard Worker PoolKey: "default", 37*333d2b36SAndroid Build Coastguard Worker }, 38*333d2b36SAndroid Build Coastguard Worker }, 39*333d2b36SAndroid Build Coastguard Worker want: fmt.Sprintf("${android.RBEWrapper} --labels=compiler=clang,lang=cpp,type=compile --platform=\"Pool=default,container-image=%s\" --exec_strategy=local --inputs=$in --output_files=$out --env_var_allowlist=LANG,LC_MESSAGES,PYTHONDONTWRITEBYTECODE -- ", DefaultImage), 40*333d2b36SAndroid Build Coastguard Worker }, 41*333d2b36SAndroid Build Coastguard Worker { 42*333d2b36SAndroid Build Coastguard Worker name: "all params", 43*333d2b36SAndroid Build Coastguard Worker params: &REParams{ 44*333d2b36SAndroid Build Coastguard Worker Labels: map[string]string{"type": "compile", "lang": "cpp", "compiler": "clang"}, 45*333d2b36SAndroid Build Coastguard Worker Inputs: []string{"$in"}, 46*333d2b36SAndroid Build Coastguard Worker OutputFiles: []string{"$out"}, 47*333d2b36SAndroid Build Coastguard Worker ExecStrategy: "remote", 48*333d2b36SAndroid Build Coastguard Worker RSPFiles: []string{"$out.rsp", "out2.rsp"}, 49*333d2b36SAndroid Build Coastguard Worker ToolchainInputs: []string{"clang++"}, 50*333d2b36SAndroid Build Coastguard Worker Platform: map[string]string{ 51*333d2b36SAndroid Build Coastguard Worker ContainerImageKey: DefaultImage, 52*333d2b36SAndroid Build Coastguard Worker PoolKey: "default", 53*333d2b36SAndroid Build Coastguard Worker }, 54*333d2b36SAndroid Build Coastguard Worker }, 55*333d2b36SAndroid Build Coastguard Worker want: fmt.Sprintf("${android.RBEWrapper} --labels=compiler=clang,lang=cpp,type=compile --platform=\"Pool=default,container-image=%s\" --exec_strategy=remote --inputs=$in --input_list_paths=$out.rsp,out2.rsp --output_files=$out --toolchain_inputs=clang++ --env_var_allowlist=LANG,LC_MESSAGES,PYTHONDONTWRITEBYTECODE -- ", DefaultImage), 56*333d2b36SAndroid Build Coastguard Worker }, 57*333d2b36SAndroid Build Coastguard Worker } 58*333d2b36SAndroid Build Coastguard Worker for _, test := range tests { 59*333d2b36SAndroid Build Coastguard Worker t.Run(test.name, func(t *testing.T) { 60*333d2b36SAndroid Build Coastguard Worker if got := test.params.Template(); got != test.want { 61*333d2b36SAndroid Build Coastguard Worker t.Errorf("Template() returned\n%s\nwant\n%s", got, test.want) 62*333d2b36SAndroid Build Coastguard Worker } 63*333d2b36SAndroid Build Coastguard Worker }) 64*333d2b36SAndroid Build Coastguard Worker } 65*333d2b36SAndroid Build Coastguard Worker} 66*333d2b36SAndroid Build Coastguard Worker 67*333d2b36SAndroid Build Coastguard Workerfunc TestNoVarTemplate(t *testing.T) { 68*333d2b36SAndroid Build Coastguard Worker params := &REParams{ 69*333d2b36SAndroid Build Coastguard Worker Labels: map[string]string{"type": "compile", "lang": "cpp", "compiler": "clang"}, 70*333d2b36SAndroid Build Coastguard Worker Inputs: []string{"$in"}, 71*333d2b36SAndroid Build Coastguard Worker OutputFiles: []string{"$out"}, 72*333d2b36SAndroid Build Coastguard Worker Platform: map[string]string{ 73*333d2b36SAndroid Build Coastguard Worker ContainerImageKey: DefaultImage, 74*333d2b36SAndroid Build Coastguard Worker PoolKey: "default", 75*333d2b36SAndroid Build Coastguard Worker }, 76*333d2b36SAndroid Build Coastguard Worker } 77*333d2b36SAndroid Build Coastguard Worker want := fmt.Sprintf("prebuilts/remoteexecution-client/live/rewrapper --labels=compiler=clang,lang=cpp,type=compile --platform=\"Pool=default,container-image=%s\" --exec_strategy=local --inputs=$in --output_files=$out --env_var_allowlist=LANG,LC_MESSAGES,PYTHONDONTWRITEBYTECODE -- ", DefaultImage) 78*333d2b36SAndroid Build Coastguard Worker if got := params.NoVarTemplate(DefaultWrapperPath); got != want { 79*333d2b36SAndroid Build Coastguard Worker t.Errorf("NoVarTemplate() returned\n%s\nwant\n%s", got, want) 80*333d2b36SAndroid Build Coastguard Worker } 81*333d2b36SAndroid Build Coastguard Worker} 82*333d2b36SAndroid Build Coastguard Worker 83*333d2b36SAndroid Build Coastguard Workerfunc TestTemplateDeterminism(t *testing.T) { 84*333d2b36SAndroid Build Coastguard Worker r := &REParams{ 85*333d2b36SAndroid Build Coastguard Worker Labels: map[string]string{"type": "compile", "lang": "cpp", "compiler": "clang"}, 86*333d2b36SAndroid Build Coastguard Worker Inputs: []string{"$in"}, 87*333d2b36SAndroid Build Coastguard Worker OutputFiles: []string{"$out"}, 88*333d2b36SAndroid Build Coastguard Worker Platform: map[string]string{ 89*333d2b36SAndroid Build Coastguard Worker ContainerImageKey: DefaultImage, 90*333d2b36SAndroid Build Coastguard Worker PoolKey: "default", 91*333d2b36SAndroid Build Coastguard Worker }, 92*333d2b36SAndroid Build Coastguard Worker } 93*333d2b36SAndroid Build Coastguard Worker want := fmt.Sprintf("${android.RBEWrapper} --labels=compiler=clang,lang=cpp,type=compile --platform=\"Pool=default,container-image=%s\" --exec_strategy=local --inputs=$in --output_files=$out --env_var_allowlist=LANG,LC_MESSAGES,PYTHONDONTWRITEBYTECODE -- ", DefaultImage) 94*333d2b36SAndroid Build Coastguard Worker for i := 0; i < 1000; i++ { 95*333d2b36SAndroid Build Coastguard Worker if got := r.Template(); got != want { 96*333d2b36SAndroid Build Coastguard Worker t.Fatalf("Template() returned\n%s\nwant\n%s", got, want) 97*333d2b36SAndroid Build Coastguard Worker } 98*333d2b36SAndroid Build Coastguard Worker } 99*333d2b36SAndroid Build Coastguard Worker} 100