mirror of https://github.com/dexidp/dex.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
112 lines
2.7 KiB
112 lines
2.7 KiB
package main |
|
|
|
import ( |
|
"io/ioutil" |
|
"os" |
|
"path" |
|
"path/filepath" |
|
"testing" |
|
|
|
"gopkg.in/yaml.v2" |
|
) |
|
|
|
type glideLock struct { |
|
Imports []struct { |
|
Name string `yaml:"name"` |
|
Subpackages []string `yaml:"subpackages,omitempty"` |
|
} `yaml:"imports"` |
|
TestImports []struct { |
|
Name string `yaml:"name"` |
|
Subpackages []string `yaml:"subpackages,omitempty"` |
|
} `yaml:"testImports"` |
|
} |
|
|
|
type glideYAML struct { |
|
Imports []struct { |
|
Name string `yaml:"package"` |
|
} `yaml:"import"` |
|
} |
|
|
|
func loadYAML(t *testing.T, file string, v interface{}) { |
|
data, err := ioutil.ReadFile(file) |
|
if err != nil { |
|
t.Fatalf("read file %s: %v", file, err) |
|
} |
|
if err := yaml.Unmarshal(data, v); err != nil { |
|
t.Fatalf("unmarshal file %s: %v", file, err) |
|
} |
|
return |
|
} |
|
|
|
// TestGlideYAMLPinsAllDependencies ensures that all packages listed in glide.lock also |
|
// appear in glide.yaml which can get out of sync if glide.yaml fails to list transitive |
|
// dependencies. |
|
// |
|
// Testing this ensures developers can update individual packages without grabbing the HEAD |
|
// of an unspecified dependency. |
|
func TestGlideYAMLPinsAllDependencies(t *testing.T) { |
|
var ( |
|
lockPackages glideLock |
|
yamlPackages glideYAML |
|
) |
|
loadYAML(t, "glide.lock", &lockPackages) |
|
loadYAML(t, "glide.yaml", &yamlPackages) |
|
|
|
if len(yamlPackages.Imports) == 0 { |
|
t.Fatalf("no packages found in glide.yaml") |
|
} |
|
|
|
pkgs := make(map[string]bool) |
|
for _, pkg := range yamlPackages.Imports { |
|
pkgs[pkg.Name] = true |
|
} |
|
|
|
for _, pkg := range lockPackages.Imports { |
|
if pkgs[pkg.Name] { |
|
continue |
|
} |
|
if len(pkg.Subpackages) == 0 { |
|
t.Errorf("package in glide lock but not pinned in glide yaml: %s", pkg.Name) |
|
continue |
|
} |
|
|
|
for _, subpkg := range pkg.Subpackages { |
|
pkgName := path.Join(pkg.Name, subpkg) |
|
if !pkgs[pkgName] { |
|
t.Errorf("package in glide lock but not pinned in glide yaml: %s", pkgName) |
|
} |
|
} |
|
} |
|
|
|
for _, pkg := range lockPackages.TestImports { |
|
if pkgs[pkg.Name] { |
|
continue |
|
} |
|
if len(pkg.Subpackages) == 0 { |
|
t.Errorf("package in glide lock but not pinned in glide yaml: %s", pkg.Name) |
|
continue |
|
} |
|
|
|
for _, subpkg := range pkg.Subpackages { |
|
pkgName := path.Join(pkg.Name, subpkg) |
|
if !pkgs[pkgName] { |
|
t.Errorf("package in glide lock but not pinned in glide yaml: %s", pkgName) |
|
} |
|
} |
|
} |
|
} |
|
|
|
func TestRemoveVersionControl(t *testing.T) { |
|
err := filepath.Walk("vendor", func(path string, info os.FileInfo, err error) error { |
|
if err != nil { |
|
t.Fatalf("walk: stat path %s failed: %v", path, err) |
|
} |
|
if info.IsDir() && filepath.Base(path) == ".git" { |
|
t.Fatalf(".git directory detected in vendor: %s. Revendor packages and remove version control data with 'glide update -s -v -u'", path) |
|
} |
|
return nil |
|
}) |
|
if err != nil { |
|
t.Fatalf("walk: %v", err) |
|
} |
|
}
|
|
|