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

Quelle  container_test.go   Sprache: unbekannt

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

// Copyright 2024 Google Inc. All rights reserved.
//
// 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 apex

import (
 "fmt"
 "testing"

 "android/soong/android"
 "android/soong/java"
)

var checkContainerMatch = func(t *testing.T, name string, container string, expected bool, actual bool) {
 errorMessage := fmt.Sprintf("module %s container %s value differ", name, container)
 android.AssertBoolEquals(t, errorMessage, expected, actual)
}

func TestApexDepsContainers(t *testing.T) {
 t.Parallel()
 t.Skip("TODO(b/394955484): this probably has to be moved to a check by the apex")
 result := android.GroupFixturePreparers(
  prepareForApexTest,
  java.PrepareForTestWithJavaSdkLibraryFiles,
  java.FixtureWithLastReleaseApis("mybootclasspathlib", "bar"),
 ).RunTestWithBp(t, `
  apex {
   name: "myapex",
   key: "myapex.key",
   bootclasspath_fragments: [
    "mybootclasspathfragment",
   ],
   updatable: true,
   min_sdk_version: "30",
  }
  apex_key {
   name: "myapex.key",
   public_key: "testkey.avbpubkey",
   private_key: "testkey.pem",
  }
  bootclasspath_fragment {
   name: "mybootclasspathfragment",
   contents: [
    "mybootclasspathlib",
   ],
   apex_available: [
    "myapex",
   ],
   hidden_api: {
    split_packages: ["*"],
   },
  }
  java_sdk_library {
   name: "mybootclasspathlib",
   srcs: [
    "mybootclasspathlib.java",
   ],
   apex_available: [
    "myapex",
   ],
   compile_dex: true,
   static_libs: [
    "food",
    "baz",
   ],
   libs: [
    "bar.stubs",
   ],
   min_sdk_version: "30",
   sdk_version: "current",
  }
  java_library {
   name: "food",
   srcs:[
    "A.java",
   ],
   apex_available: [
    "myapex",
   ],
   min_sdk_version: "30",
   sdk_version: "core_current",
  }
  java_sdk_library {
   name: "bar",
   srcs:[
    "A.java",
   ],
   min_sdk_version: "30",
   sdk_version: "core_current",
  }
  java_library {
   name: "baz",
   srcs:[
    "A.java",
   ],
   apex_available: [
    "//apex_available:platform",
    "myapex",
   ],
   min_sdk_version: "30",
   sdk_version: "core_current",
  }
 `)
 testcases := []struct {
  moduleName        string
  variant           string
  isSystemContainer bool
  isApexContainer   bool
 }{
  {
   moduleName:        "mybootclasspathlib",
   variant:           "android_common_myapex",
   isSystemContainer: true,
   isApexContainer:   true,
  },
  {
   moduleName:        "mybootclasspathlib.impl",
   variant:           "android_common_apex30",
   isSystemContainer: true,
   isApexContainer:   true,
  },
  {
   moduleName:        "mybootclasspathlib.stubs",
   variant:           "android_common",
   isSystemContainer: true,
   isApexContainer:   false,
  },
  {
   moduleName:        "food",
   variant:           "android_common_apex30",
   isSystemContainer: true,
   isApexContainer:   true,
  },
  {
   moduleName:        "bar",
   variant:           "android_common",
   isSystemContainer: true,
   isApexContainer:   false,
  },
  {
   moduleName:        "baz",
   variant:           "android_common_apex30",
   isSystemContainer: true,
   isApexContainer:   true,
  },
 }

 for _, c := range testcases {
  m := result.ModuleForTests(t, c.moduleName, c.variant)
  containers := android.OtherModulePointerProviderOrDefault(result.TestContext.OtherModuleProviderAdaptor(),
   m.Module(), android.CommonModuleInfoProvider).Containers
  belongingContainers := containers.BelongingContainers()
  checkContainerMatch(t, c.moduleName, "system", c.isSystemContainer, android.InList(android.SystemContainer, belongingContainers))
  checkContainerMatch(t, c.moduleName, "apex", c.isApexContainer, android.InList(android.ApexContainer, belongingContainers))
 }
}

func TestNonUpdatableApexDepsContainers(t *testing.T) {
 t.Parallel()
 t.Skip("TODO(b/394955484): this probably has to be moved to a check by the apex")
 result := android.GroupFixturePreparers(
  prepareForApexTest,
  java.PrepareForTestWithJavaSdkLibraryFiles,
  java.FixtureWithLastReleaseApis("mybootclasspathlib", "bar"),
 ).RunTestWithBp(t, `
  apex {
   name: "myapex",
   key: "myapex.key",
   bootclasspath_fragments: [
    "mybootclasspathfragment",
   ],
   updatable: false,
  }
  apex_key {
   name: "myapex.key",
   public_key: "testkey.avbpubkey",
   private_key: "testkey.pem",
  }
  bootclasspath_fragment {
   name: "mybootclasspathfragment",
   contents: [
    "mybootclasspathlib",
   ],
   apex_available: [
    "myapex",
   ],
   hidden_api: {
    split_packages: ["*"],
   },
  }
  java_sdk_library {
   name: "mybootclasspathlib",
   srcs: [
    "mybootclasspathlib.java",
   ],
   apex_available: [
    "myapex",
   ],
   compile_dex: true,
   static_libs: [
    "food",
   ],
   libs: [
    "bar.stubs",
   ],
   sdk_version: "current",
  }
  java_library {
   name: "food",
   srcs:[
    "A.java",
   ],
   apex_available: [
    "myapex",
   ],
   sdk_version: "core_current",
  }
  java_sdk_library {
   name: "bar",
   srcs:[
    "A.java",
   ],
   sdk_version: "none",
   system_modules: "none",
  }
 `)
 testcases := []struct {
  moduleName        string
  variant           string
  isSystemContainer bool
  isApexContainer   bool
 }{
  {
   moduleName:        "mybootclasspathlib",
   variant:           "android_common_myapex",
   isSystemContainer: true,
   isApexContainer:   true,
  },
  {
   moduleName:        "mybootclasspathlib.impl",
   variant:           "android_common_apex10000",
   isSystemContainer: true,
   isApexContainer:   true,
  },
  {
   moduleName:        "mybootclasspathlib.stubs",
   variant:           "android_common",
   isSystemContainer: true,
   isApexContainer:   false,
  },
  {
   moduleName:        "food",
   variant:           "android_common_apex10000",
   isSystemContainer: true,
   isApexContainer:   true,
  },
  {
   moduleName:        "bar",
   variant:           "android_common",
   isSystemContainer: true,
   isApexContainer:   false,
  },
 }

 for _, c := range testcases {
  m := result.ModuleForTests(t, c.moduleName, c.variant)
  containers := android.OtherModuleProviderOrDefault(result.TestContext.OtherModuleProviderAdaptor(),
   m.Module(), android.CommonModuleInfoProvider).Containers
  belongingContainers := containers.BelongingContainers()
  checkContainerMatch(t, c.moduleName, "system", c.isSystemContainer, android.InList(android.SystemContainer, belongingContainers))
  checkContainerMatch(t, c.moduleName, "apex", c.isApexContainer, android.InList(android.ApexContainer, belongingContainers))
 }
}

func TestUpdatableAndNonUpdatableApexesIdenticalMinSdkVersion(t *testing.T) {
 t.Parallel()
 t.Skip("TODO(b/394955484): this probably has to be moved to a check by the apex")
 result := android.GroupFixturePreparers(
  prepareForApexTest,
  java.PrepareForTestWithJavaSdkLibraryFiles,
  android.FixtureMergeMockFs(android.MockFS{
   "system/sepolicy/apex/myapex_non_updatable-file_contexts": nil,
   "system/sepolicy/apex/myapex_updatable-file_contexts":     nil,
  }),
 ).RunTestWithBp(t, `
  apex {
   name: "myapex_non_updatable",
   key: "myapex_non_updatable.key",
   java_libs: [
    "foo",
   ],
   updatable: false,
   min_sdk_version: "30",
  }
  apex_key {
   name: "myapex_non_updatable.key",
   public_key: "testkey.avbpubkey",
   private_key: "testkey.pem",
  }

  apex {
   name: "myapex_updatable",
   key: "myapex_updatable.key",
   java_libs: [
    "foo",
   ],
   updatable: true,
   min_sdk_version: "30",
  }
  apex_key {
   name: "myapex_updatable.key",
   public_key: "testkey.avbpubkey",
   private_key: "testkey.pem",
  }

  java_library {
   name: "foo",
   srcs:[
    "A.java",
   ],
   apex_available: [
    "myapex_non_updatable",
    "myapex_updatable",
   ],
   min_sdk_version: "30",
   sdk_version: "current",
   compile_dex: true,
  }
 `)

 fooApexVariant := result.ModuleForTests(t, "foo", "android_common_apex30")
 containers := android.OtherModulePointerProviderOrDefault(result.TestContext.OtherModuleProviderAdaptor(),
  fooApexVariant.Module(), android.CommonModuleInfoProvider).Containers
 belongingContainers := containers.BelongingContainers()
 checkContainerMatch(t, "foo", "system", true, android.InList(android.SystemContainer, belongingContainers))
 checkContainerMatch(t, "foo", "apex", true, android.InList(android.ApexContainer, belongingContainers))
}

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