aboutsummaryrefslogtreecommitdiff
path: root/cmd/release_config/release_config_lib/flag_declaration_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/release_config/release_config_lib/flag_declaration_test.go')
-rw-r--r--cmd/release_config/release_config_lib/flag_declaration_test.go90
1 files changed, 90 insertions, 0 deletions
diff --git a/cmd/release_config/release_config_lib/flag_declaration_test.go b/cmd/release_config/release_config_lib/flag_declaration_test.go
new file mode 100644
index 000000000..058ae37e2
--- /dev/null
+++ b/cmd/release_config/release_config_lib/flag_declaration_test.go
@@ -0,0 +1,90 @@
+// Copyright 2025 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 release_config_lib
+
+import (
+ "fmt"
+ "os"
+ "path/filepath"
+ "strings"
+ "testing"
+
+ rc_proto "android/soong/cmd/release_config/release_config_proto"
+ // For Assert*.
+ "android/soong/android"
+
+ "google.golang.org/protobuf/proto"
+)
+
+type testCaseFlagDeclarationFactory struct {
+ protoPath string
+ name string
+ data []byte
+ expected *rc_proto.FlagDeclaration
+ err error
+}
+
+func (tc testCaseFlagDeclarationFactory) assertProtoEqual(t *testing.T, expected, actual proto.Message) {
+ if !proto.Equal(expected, actual) {
+ t.Errorf("Expected %q found %q", expected, actual)
+ }
+}
+
+func TestFlagDeclarationFactory(t *testing.T) {
+ testCases := []testCaseFlagDeclarationFactory{
+ {
+ name: "boolVal",
+ protoPath: "build/release/flag_values/test/RELEASE_FOO.textproto",
+ data: []byte(`name: "RELEASE_FOO" namespace: "soong_test" value {bool_value: false} workflow: LAUNCH containers: "product"`),
+ expected: &rc_proto.FlagDeclaration{
+ Name: proto.String("RELEASE_FOO"),
+ Namespace: proto.String("soong_test"),
+ Value: &rc_proto.Value{Val: &rc_proto.Value_BoolValue{false}},
+ Workflow: rc_proto.Workflow_LAUNCH.Enum(),
+ Containers: []string{"product"},
+ },
+ err: nil,
+ },
+ {
+ name: "missingWorkflow",
+ protoPath: "build/release/flag_values/test/RELEASE_FOO.textproto",
+ data: []byte(`name: "RELEASE_FOO" namespace: "soong_test" value {bool_value: false} containers: "product"`),
+ expected: nil,
+ err: fmt.Errorf("has no workflow"),
+ },
+ }
+ for _, tc := range testCases {
+ t.Run(tc.name, func(t *testing.T) {
+ var err error
+ tempdir := t.TempDir()
+ path := filepath.Join(tempdir, tc.protoPath)
+ if err = os.MkdirAll(filepath.Dir(path), 0755); err != nil {
+ t.Fatal(err)
+ }
+ if err = os.WriteFile(path, tc.data, 0644); err != nil {
+ t.Fatal(err)
+ }
+ actual, err := FlagDeclarationFactory(path)
+ if tc.err == nil {
+ android.AssertSame(t, "Expected %v got %v", tc.err, err)
+ tc.assertProtoEqual(t, tc.expected, actual)
+ } else if err == nil {
+ t.Errorf("Expected error containing '%q' got nil", tc.err.Error())
+ } else if !strings.Contains(err.Error(), tc.err.Error()) {
+ t.Errorf("Error %v does not include %v", err.Error(), tc.err.Error())
+ }
+ })
+ }
+}