| // Copyright 2023 The Bazel Authors. 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 manifest_test |
| |
| import ( |
| "bytes" |
| "log" |
| "os" |
| "reflect" |
| "strings" |
| "testing" |
| |
| "github.com/bazelbuild/rules_python/gazelle/manifest" |
| ) |
| |
| var modulesMapping = manifest.ModulesMapping{ |
| "arrow": "arrow", |
| } |
| |
| const pipDepsRepositoryName = "test_repository_name" |
| |
| func TestFile(t *testing.T) { |
| t.Run("EncodeWithIntegrity", func(t *testing.T) { |
| f := manifest.NewFile(&manifest.Manifest{ |
| ModulesMapping: modulesMapping, |
| PipDepsRepositoryName: pipDepsRepositoryName, |
| }) |
| var b bytes.Buffer |
| manifestGeneratorHashFile := strings.NewReader("") |
| requirements, err := os.Open("testdata/requirements.txt") |
| if err != nil { |
| log.Println(err) |
| t.FailNow() |
| } |
| defer requirements.Close() |
| if err := f.EncodeWithIntegrity(&b, manifestGeneratorHashFile, requirements); err != nil { |
| log.Println(err) |
| t.FailNow() |
| } |
| expected, err := os.ReadFile("testdata/gazelle_python.yaml") |
| if err != nil { |
| log.Println(err) |
| t.FailNow() |
| } |
| if !bytes.Equal(expected, b.Bytes()) { |
| log.Printf("encoded manifest doesn't match expected output: %v\n", b.String()) |
| t.FailNow() |
| } |
| }) |
| t.Run("Decode", func(t *testing.T) { |
| f := manifest.NewFile(&manifest.Manifest{}) |
| if err := f.Decode("testdata/gazelle_python.yaml"); err != nil { |
| log.Println(err) |
| t.FailNow() |
| } |
| if !reflect.DeepEqual(modulesMapping, f.Manifest.ModulesMapping) { |
| log.Println("decoded modules_mapping doesn't match expected value") |
| t.FailNow() |
| } |
| if f.Manifest.PipDepsRepositoryName != pipDepsRepositoryName { |
| log.Println("decoded pip repository name doesn't match expected value") |
| t.FailNow() |
| } |
| }) |
| t.Run("VerifyIntegrity", func(t *testing.T) { |
| f := manifest.NewFile(&manifest.Manifest{}) |
| if err := f.Decode("testdata/gazelle_python.yaml"); err != nil { |
| log.Println(err) |
| t.FailNow() |
| } |
| manifestGeneratorHashFile := strings.NewReader("") |
| requirements, err := os.Open("testdata/requirements.txt") |
| if err != nil { |
| log.Println(err) |
| t.FailNow() |
| } |
| defer requirements.Close() |
| valid, err := f.VerifyIntegrity(manifestGeneratorHashFile, requirements) |
| if err != nil { |
| log.Println(err) |
| t.FailNow() |
| } |
| if !valid { |
| log.Println("decoded manifest file is not valid") |
| t.FailNow() |
| } |
| }) |
| } |