Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Android/build/build/soong/rust/   (Android Betriebssystem Version 17©)  Datei vom 26.5.2026 mit Größe 9 kB image not shown  

SSL cipd_package_test.go   Sprache: unbekannt

 
Spracherkennung für: .go vermutete Sprache: Unknown {[0] [0] [0]} [Methode: Schwerpunktbildung, einfache Gewichte, sechs Dimensionen]

// Copyright 2025 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package cipd

import (
 "android/soong/android"
 "slices"
 "testing"
)

func TestCipdPackagePrefix_SuffixMissing(t *testing.T) {
 bp := `
 cipd_package {
  name: "cipd_package1",
  package_prefix: "android/prebuilts/package1",
  version: "version1",
  files: [
   "package1_file1",
   "package1_file2",
  ],
  resolved_versions_file: "cipd.versions",
 }
 `

 result := android.GroupFixturePreparers(
  android.PrepareForTestWithAndroidBuildComponents,
  android.FixtureRegisterWithContext(RegisterCipdPackageComponents),
 ).RunTestWithBp(t, bp)
 module := result.ModuleForTests(t, "cipd_package1", "")
 ensureFile := module.Output("ensure.txt")
 if !android.IsErrorRule(ensureFile.Rule) {
  t.Errorf("Expected ErrorRule, got %q", ensureFile.Rule)
 }
 android.AssertStringEquals(t, "error message",
  "'cipd_package1: package_suffix must not be empty'",
  ensureFile.Args["error"])
}

func TestCipdPackagePrefix_SuffixEmpty(t *testing.T) {
 bp := `
 cipd_package {
  name: "cipd_package1",
  package_prefix: "android/prebuilts/package1",
  package_suffix: "",
  version: "version1",
  files: [
   "package1_file1",
   "package1_file2",
  ],
  resolved_versions_file: "cipd.versions",
 }
 `

 result := android.GroupFixturePreparers(
  android.PrepareForTestWithAndroidBuildComponents,
  android.FixtureRegisterWithContext(RegisterCipdPackageComponents),
 ).RunTestWithBp(t, bp)
 module := result.ModuleForTests(t, "cipd_package1", "")
 ensureFile := module.Output("ensure.txt")
 if !android.IsErrorRule(ensureFile.Rule) {
  t.Errorf("Expected ErrorRule, got %q", ensureFile.Rule)
 }
 android.AssertStringEquals(t, "error message",
  "'cipd_package1: package_suffix must not be empty'",
  ensureFile.Args["error"])
}

func TestCipdPackagePrefixAndSuffix(t *testing.T) {
 bp := `
 cipd_package {
  name: "cipd_package1",
  package_prefix: "android/prebuilts/package1",
  package_suffix: select(release_flag("PACKAGE_FLAG"), {
   default: "variant",
  }),
  version: "version1",
  files: [
   "package1_file1",
   "package1_file2",
  ],
  resolved_versions_file: "cipd.versions",
 }
 `

 result := android.GroupFixturePreparers(
  android.PrepareForTestWithAndroidBuildComponents,
  android.FixtureRegisterWithContext(RegisterCipdPackageComponents),
 ).RunTestWithBp(t, bp)

 module := result.ModuleForTests(t, "cipd_package1", "")
 export := module.Rule("cipd_export")

 intermediateDir := "out/soong/.intermediates/cipd_package1"
 wantEnsureFile := intermediateDir + "/ensure.txt"
 if export.Input.String() != wantEnsureFile {
  t.Errorf("export.Input.String() = %v, want %v", export.Input.String(), wantEnsureFile)
 }
 if len(export.Inputs) != 0 {
  t.Errorf("len(export.Inputs) = %v, want 0", len(export.Inputs))
 }

 wantRoot := intermediateDir + "/package"
 wantExportOutputs := []string{
  wantRoot + "/package1_file1",
  wantRoot + "/package1_file2",
 }
 wantPackage := "android/prebuilts/package1/variant"
 wantVersion := "version1"

 var gotExportOutputs []string
 for _, output := range export.Outputs {
  gotExportOutputs = append(gotExportOutputs, output.String())
 }
 if !slices.Equal(wantExportOutputs, gotExportOutputs) {
  t.Errorf("export.Outputs = %v, want %v", gotExportOutputs, wantExportOutputs)
 }
 if export.Output != nil {
  t.Errorf("export.Output = %v, want nil", export.Output)
 }
 if export.Args["root"] != wantRoot {
  t.Errorf("export.Args[\"root\"] = %v, want %v", export.Args["root"], wantRoot)
 }
 if export.Args["package"] != wantPackage {
  t.Errorf("export.Args[\"package\"] = %v, want %v", export.Args["package"], wantPackage)
 }
 if export.Args["version"] != wantVersion {
  t.Errorf("export.Args[\"version\"] = %v, want %v", export.Args["version"], wantVersion)
 }

 zipRule := module.Rule("soong_zip_from_dir")
 wantZipFile := intermediateDir + "/package.zip"
 if zipRule.Output.String() != wantZipFile {
  t.Errorf("zipRule.Output = %q, want %q", zipRule.Output.String(), wantZipFile)
 }

 if zipRule.Input.String() != wantEnsureFile {
  t.Errorf("zipRule.Input.String() = %q, want %q", zipRule.Input.String(), wantEnsureFile)
 }
 wantTempZipDir := intermediateDir + "/zip_temp_pkg_dir"
 if zipRule.Args["tempZipDir"] != wantTempZipDir {
  t.Errorf("zipRule.Args[\"tempZipDir\"] = %q, want %q", zipRule.Args["tempZipDir"], wantTempZipDir)
 }
 if export.Args["package"] != wantPackage {
  t.Errorf("export.Args[\"package\"] = %v, want %v", export.Args["package"], wantPackage)
 }
 if export.Args["version"] != wantVersion {
  t.Errorf("export.Args[\"version\"] = %v, want %v", export.Args["version"], wantVersion)
 }

 zipTaggedOutputs := module.OutputFiles(result.TestContext, t, ".zip")
 if len(zipTaggedOutputs) != 1 {
  t.Errorf("len(module.OutputFiles(..., \".zip\")) = %d, want 1", len(zipTaggedOutputs))
 }
 if val := zipTaggedOutputs[0].String(); val != wantZipFile {
  t.Errorf("module.OutputFiles(..., \".zip\")[0] = %q, want %q", val, wantZipFile)
 }
}

func TestCipdPackage_NoVariant(t *testing.T) {
 bp := `
 cipd_package {
  name: "cipd_package1",
  package: "android/prebuilts/package1",
  version: "version1",
  files: [
   "package1_file1",
   "package1_file2",
  ],
  resolved_versions_file: "cipd.versions",
 }
 `

 result := android.GroupFixturePreparers(
  android.PrepareForTestWithAndroidBuildComponents,
  android.FixtureRegisterWithContext(RegisterCipdPackageComponents),
 ).RunTestWithBp(t, bp)

 module := result.ModuleForTests(t, "cipd_package1", "")
 export := module.Rule("cipd_export")

 intermediateDir := "out/soong/.intermediates/cipd_package1"
 wantEnsureFile := intermediateDir + "/ensure.txt"
 if export.Input.String() != wantEnsureFile {
  t.Errorf("export.Input.String() = %v, want %v", export.Input.String(), wantEnsureFile)
 }
 if len(export.Inputs) != 0 {
  t.Errorf("len(export.Inputs) = %v, want 0", len(export.Inputs))
 }

 wantRoot := intermediateDir + "/package"
 wantExportOutputs := []string{
  wantRoot + "/package1_file1",
  wantRoot + "/package1_file2",
 }
 wantPackage := "android/prebuilts/package1"
 wantVersion := "version1"

 var gotExportOutputs []string
 for _, output := range export.Outputs {
  gotExportOutputs = append(gotExportOutputs, output.String())
 }
 if !slices.Equal(wantExportOutputs, gotExportOutputs) {
  t.Errorf("export.Outputs = %v, want %v", gotExportOutputs, wantExportOutputs)
 }
 if export.Output != nil {
  t.Errorf("export.Output = %v, want nil", export.Output)
 }
 if export.Args["root"] != wantRoot {
  t.Errorf("export.Args[\"root\"] = %v, want %v", export.Args["root"], wantRoot)
 }
 if export.Args["package"] != wantPackage {
  t.Errorf("export.Args[\"package\"] = %v, want %v", export.Args["package"], wantPackage)
 }
 if export.Args["version"] != wantVersion {
  t.Errorf("export.Args[\"version\"] = %v, want %v", export.Args["version"], wantVersion)
 }

 zipRule := module.Rule("soong_zip_from_dir")
 wantZipFile := intermediateDir + "/package.zip"
 if zipRule.Output.String() != wantZipFile {
  t.Errorf("zipRule.Output = %q, want %q", zipRule.Output.String(), wantZipFile)
 }

 if zipRule.Input.String() != wantEnsureFile {
  t.Errorf("zipRule.Input.String() = %q, want %q", zipRule.Input.String(), wantEnsureFile)
 }
 wantTempZipDir := intermediateDir + "/zip_temp_pkg_dir"
 if zipRule.Args["tempZipDir"] != wantTempZipDir {
  t.Errorf("zipRule.Args[\"tempZipDir\"] = %q, want %q", zipRule.Args["tempZipDir"], wantTempZipDir)
 }
 if export.Args["package"] != wantPackage {
  t.Errorf("export.Args[\"package\"] = %v, want %v", export.Args["package"], wantPackage)
 }
 if export.Args["version"] != wantVersion {
  t.Errorf("export.Args[\"version\"] = %v, want %v", export.Args["version"], wantVersion)
 }

 zipTaggedOutputs := module.OutputFiles(result.TestContext, t, ".zip")
 if len(zipTaggedOutputs) != 1 {
  t.Errorf("len(module.OutputFiles(..., \".zip\")) = %d, want 1", len(zipTaggedOutputs))
 }
 if val := zipTaggedOutputs[0].String(); val != wantZipFile {
  t.Errorf("module.OutputFiles(..., \".zip\")[0] = %q, want %q", val, wantZipFile)
 }
}

func TestNoMatchedSelectCase_PackageSuffix(t *testing.T) {
 // Test that the bp is evaluated successfully even if there is no
 // matching select case for the "package_suffix" property.
 // It should yield an ErrorRule.
 bp := `
 cipd_package {
  name: "cipd_package1",
                package_prefix: "android/prebuilts/package1",
  package_suffix: select(release_flag("PACKAGE_FLAG"), {
   "unused": "value",
  }),
  version: "version1",
  files: [
   "package1_file1",
   "package1_file2",
  ],
  resolved_versions_file: "cipd.versions",
 }
 `

 result := android.GroupFixturePreparers(
  android.PrepareForTestWithAndroidBuildComponents,
  android.FixtureRegisterWithContext(RegisterCipdPackageComponents),
 ).RunTestWithBp(t, bp)
 module := result.ModuleForTests(t, "cipd_package1", "")
 ensureFile := module.Output("ensure.txt")
 if !android.IsErrorRule(ensureFile.Rule) {
  t.Errorf("Expected ErrorRule, got %q", ensureFile.Rule)
 }
 android.AssertStringEquals(t, "error message",
  "'cipd_package1: release_flag(\"PACKAGE_FLAG\") had value undefined, which was not handled by the select statement'",
  ensureFile.Args["error"])
}

func TestNoMatchedSelectCase_Package_NoVariant(t *testing.T) {
 // Test that the bp is evaluated successfully even if there is no
 // matching select case for the "package" property.
 // It should yield an ErrorRule.
 bp := `
 cipd_package {
  name: "cipd_package1",
  package: select(release_flag("PACKAGE_FLAG"), {
   "unused": "android/prebuilts/package1",
  }),
  version: "version1",
  files: [
   "package1_file1",
   "package1_file2",
  ],
  resolved_versions_file: "cipd.versions",
 }
 `

 result := android.GroupFixturePreparers(
  android.PrepareForTestWithAndroidBuildComponents,
  android.FixtureRegisterWithContext(RegisterCipdPackageComponents),
 ).RunTestWithBp(t, bp)
 module := result.ModuleForTests(t, "cipd_package1", "")
 ensureFile := module.Output("ensure.txt")
 if !android.IsErrorRule(ensureFile.Rule) {
  t.Errorf("Expected ErrorRule, got %q", ensureFile.Rule)
 }
 android.AssertStringEquals(t, "error message",
  "'cipd_package1: release_flag(\"PACKAGE_FLAG\") had value undefined, which was not handled by the select statement'",
  ensureFile.Args["error"])
}

func TestNoMatchedSelectCase_Version(t *testing.T) {
 // Test that the bp is evaluated successfully even if there is no
 // matching select case for the "version" property.
 bp := `
 cipd_package {
  name: "cipd_package1",
  package: "android/prebuilts/package1",
  version: select(release_flag("VERSION"), {
   "unused": "version1",
  }),
  files: [
   "package1_file1",
   "package1_file2",
  ],
  resolved_versions_file: "cipd.versions",
 }
 `

 result := android.GroupFixturePreparers(
  android.PrepareForTestWithAndroidBuildComponents,
  android.FixtureRegisterWithContext(RegisterCipdPackageComponents),
 ).RunTestWithBp(t, bp)
 module := result.ModuleForTests(t, "cipd_package1", "")
 ensureFile := module.Output("ensure.txt")
 if !android.IsErrorRule(ensureFile.Rule) {
  t.Errorf("Expected ErrorRule, got %q", ensureFile.Rule)
 }
 android.AssertStringEquals(t, "error message",
  "'cipd_package1: release_flag(\"VERSION\") had value undefined, which was not handled by the select statement'",
  ensureFile.Args["error"])
}

func TestPackageSuffixIsUnset(t *testing.T) {
 // Don't panic if the package_suffix property is unset.
 bp := `
 cipd_package {
  name: "cipd_package1",
  package_prefix: "android/prebuilts/package1",
  package_suffix: select(release_flag("PACKAGE_FLAG"), {
   "unused": "value",
   default: unset,
  }),
  version: "version1",
  files: [
   "package1_file1",
   "package1_file2",
  ],
  resolved_versions_file: "cipd.versions",
 }
 `

 result := android.GroupFixturePreparers(
  android.PrepareForTestWithAndroidBuildComponents,
  android.FixtureRegisterWithContext(RegisterCipdPackageComponents),
 ).RunTestWithBp(t, bp)
 module := result.ModuleForTests(t, "cipd_package1", "")
 ensureFile := module.Output("ensure.txt")
 if !android.IsErrorRule(ensureFile.Rule) {
  t.Errorf("Expected ErrorRule, got %q", ensureFile.Rule)
 }
 android.AssertStringEquals(t, "error message",
  "'cipd_package1: package_suffix must not be empty'",
  ensureFile.Args["error"])
}

func TestPackageIsUnset_NoVariant(t *testing.T) {
 // Don't panic if the package property is unset.
 bp := `
 cipd_package {
  name: "cipd_package1",
  package: select(release_flag("PACKAGE_FLAG"), {
   "unused": "android/prebuilts/package1",
   default: unset,
  }),
  version: "version1",
  files: [
   "package1_file1",
   "package1_file2",
  ],
  resolved_versions_file: "cipd.versions",
 }
 `

 result := android.GroupFixturePreparers(
  android.PrepareForTestWithAndroidBuildComponents,
  android.FixtureRegisterWithContext(RegisterCipdPackageComponents),
 ).RunTestWithBp(t, bp)
 module := result.ModuleForTests(t, "cipd_package1", "")
 ensureFile := module.Output("ensure.txt")
 if !android.IsErrorRule(ensureFile.Rule) {
  t.Errorf("Expected ErrorRule, got %q", ensureFile.Rule)
 }
 android.AssertStringEquals(t, "error message",
  "'cipd_package1: package property is empty'",
  ensureFile.Args["error"])
}

func TestVersionIsUnset(t *testing.T) {
 // Don't panic if the version property is unset.
 bp := `
 cipd_package {
  name: "cipd_package1",
  package: "android/prebuilts/package1",
  version: select(release_flag("VERSION"), {
   "unused": "version1",
   default: unset,
  }),
  files: [
   "package1_file1",
   "package1_file2",
  ],
  resolved_versions_file: "cipd.versions",
 }
 `

 result := android.GroupFixturePreparers(
  android.PrepareForTestWithAndroidBuildComponents,
  android.FixtureRegisterWithContext(RegisterCipdPackageComponents),
 ).RunTestWithBp(t, bp)
 module := result.ModuleForTests(t, "cipd_package1", "")
 ensureFile := module.Output("ensure.txt")
 if !android.IsErrorRule(ensureFile.Rule) {
  t.Errorf("Expected ErrorRule, got %q", ensureFile.Rule)
 }
 android.AssertStringEquals(t, "error message",
  "'cipd_package1: version property is empty'",
  ensureFile.Args["error"])
}

func TestCipdPackage_FilesSelect(t *testing.T) {
 // Test that select() can be used in the files property.
 bp := `
 cipd_package {
  name: "cipd_package1",
  package: "android/prebuilts/package1",
  version: "version1",
  files: select(soong_config_variable("test", "var"), {
   any @ v: ["file1-" + v],
  }),
  resolved_versions_file: "cipd.versions",
 }
 `

 result := android.GroupFixturePreparers(
  android.PrepareForTestWithAndroidBuildComponents,
  android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
   variables.VendorVars = map[string]map[string]string{
    "test": {
     "var": "debug",
    },
   }
  }),
  android.FixtureRegisterWithContext(RegisterCipdPackageComponents),
 ).RunTestWithBp(t, bp)
 module := result.ModuleForTests(t, "cipd_package1", "")
 export := module.Rule("cipd_export")
 intermediateDir := "out/soong/.intermediates/cipd_package1"
 wantEnsureFile := intermediateDir + "/ensure.txt"
 if export.Input.String() != wantEnsureFile {
  t.Errorf("export.Input.String() = %v, want %v", export.Input.String(), wantEnsureFile)
 }
 if len(export.Inputs) != 0 {
  t.Errorf("len(export.Inputs) = %v, want 0", len(export.Inputs))
 }
 wantRoot := intermediateDir + "/package"
 wantExportOutputs := []string{
  wantRoot + "/file1-debug",
 }
 wantPackage := "android/prebuilts/package1"
 wantVersion := "version1"
 var gotExportOutputs []string
 for _, output := range export.Outputs {
  gotExportOutputs = append(gotExportOutputs, output.String())
 }
 if !slices.Equal(wantExportOutputs, gotExportOutputs) {
  t.Errorf("export.Outputs = %v, want %v", gotExportOutputs, wantExportOutputs)
 }
 if export.Output != nil {
  t.Errorf("export.Output = %v, want nil", export.Output)
 }
 if export.Args["root"] != wantRoot {
  t.Errorf("export.Args[\"root\"] = %v, want %v", export.Args["root"], wantRoot)
 }
 if export.Args["package"] != wantPackage {
  t.Errorf("export.Args[\"package\"] = %v, want %v", export.Args["package"], wantPackage)
 }
 if export.Args["version"] != wantVersion {
  t.Errorf("export.Args[\"version\"] = %v, want %v", export.Args["version"], wantVersion)
 }
}

func TestCipdPackage_CantMixPackageAndPackagePrefix(t *testing.T) {
 bp := `
 cipd_package {
  name: "cipd_package1",
  package: "android/prebuilts/package1",
  package_prefix: "android/prebuilts/package1",
  version: "version1",
  files: [
   "package1_file1",
   "package1_file2",
  ],
  resolved_versions_file: "cipd.versions",
 }
 `

 android.GroupFixturePreparers(
  android.PrepareForTestWithAndroidBuildComponents,
  android.FixtureRegisterWithContext(RegisterCipdPackageComponents),
 ).
  ExtendWithErrorHandler(android.FixtureExpectsOneErrorPattern("package: cannot be specified together with package_prefix")).
  RunTestWithBp(t, bp)
}

func TestCipdPackage_CantMixPackageAndPackageSuffix(t *testing.T) {
 bp := `
 cipd_package {
  name: "cipd_package1",
  package: "android/prebuilts/package1",
  package_suffix: "android/prebuilts/package1",
  version: "version1",
  files: [
   "package1_file1",
   "package1_file2",
  ],
  resolved_versions_file: "cipd.versions",
 }
 `

 android.GroupFixturePreparers(
  android.PrepareForTestWithAndroidBuildComponents,
  android.FixtureRegisterWithContext(RegisterCipdPackageComponents),
 ).
  ExtendWithErrorHandler(android.FixtureExpectsOneErrorPattern("must not specify both package and package_suffix")).
  RunTestWithBp(t, bp)
}

[Dauer der Verarbeitung: 0.21 Sekunden, vorverarbeitet 2026-06-28]