github.com/golang/dep@v0.5.4/internal/importers/glide/importer_test.go (about) 1 // Copyright 2016 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package glide 6 7 import ( 8 "bytes" 9 "log" 10 "path/filepath" 11 "testing" 12 13 "github.com/golang/dep" 14 "github.com/golang/dep/gps" 15 "github.com/golang/dep/internal/importers/importertest" 16 "github.com/golang/dep/internal/test" 17 "github.com/pkg/errors" 18 ) 19 20 func TestGlideConfig_Convert(t *testing.T) { 21 testCases := map[string]struct { 22 yaml glideYaml 23 lock glideLock 24 importertest.TestCase 25 }{ 26 "project": { 27 glideYaml{ 28 Imports: []glidePackage{ 29 { 30 Name: importertest.Project, 31 Repository: importertest.ProjectSrc, 32 Reference: importertest.V2Branch, 33 }, 34 }, 35 }, 36 glideLock{ 37 Imports: []glideLockedPackage{ 38 { 39 Name: importertest.Project, 40 Repository: importertest.ProjectSrc, 41 Revision: importertest.V2PatchRev, 42 }, 43 }, 44 }, 45 importertest.TestCase{ 46 WantSourceRepo: importertest.ProjectSrc, 47 WantConstraint: importertest.V2Branch, 48 WantRevision: importertest.V2PatchRev, 49 WantVersion: importertest.V2PatchTag, 50 }, 51 }, 52 "test project": { 53 glideYaml{ 54 Imports: []glidePackage{ 55 { 56 Name: importertest.Project, 57 Repository: importertest.ProjectSrc, 58 Reference: importertest.V2Branch, 59 }, 60 }, 61 }, 62 glideLock{ 63 Imports: []glideLockedPackage{ 64 { 65 Name: importertest.Project, 66 Repository: importertest.ProjectSrc, 67 Revision: importertest.V2PatchRev, 68 }, 69 }, 70 }, 71 importertest.TestCase{ 72 WantSourceRepo: importertest.ProjectSrc, 73 WantConstraint: importertest.V2Branch, 74 WantRevision: importertest.V2PatchRev, 75 WantVersion: importertest.V2PatchTag, 76 }, 77 }, 78 "yaml only": { 79 glideYaml{ 80 Imports: []glidePackage{ 81 { 82 Name: importertest.Project, 83 Repository: importertest.ProjectSrc, 84 Reference: importertest.V2Branch, 85 }, 86 }, 87 }, 88 glideLock{}, 89 importertest.TestCase{ 90 WantSourceRepo: importertest.ProjectSrc, 91 WantConstraint: importertest.V2Branch, 92 }, 93 }, 94 "ignored package": { 95 glideYaml{ 96 Ignores: []string{importertest.Project}, 97 }, 98 glideLock{}, 99 importertest.TestCase{ 100 WantIgnored: []string{importertest.Project}, 101 }, 102 }, 103 "exclude dir": { 104 glideYaml{ 105 ExcludeDirs: []string{"samples"}, 106 }, 107 glideLock{}, 108 importertest.TestCase{ 109 WantIgnored: []string{importertest.RootProject + "/samples"}, 110 }, 111 }, 112 "exclude dir ignores mismatched package name": { 113 glideYaml{ 114 Name: "github.com/golang/mismatched-package-name", 115 ExcludeDirs: []string{"samples"}, 116 }, 117 glideLock{}, 118 importertest.TestCase{ 119 WantIgnored: []string{importertest.RootProject + "/samples"}, 120 }, 121 }, 122 "missing package name": { 123 glideYaml{ 124 Imports: []glidePackage{{Name: ""}}, 125 }, 126 glideLock{}, 127 importertest.TestCase{ 128 WantWarning: "Warning: Skipping project. Invalid glide configuration, Name is required", 129 }, 130 }, 131 "warn unused os field": { 132 glideYaml{ 133 Imports: []glidePackage{ 134 { 135 Name: importertest.Project, 136 OS: "windows", 137 }, 138 }}, 139 glideLock{}, 140 importertest.TestCase{ 141 WantWarning: "specified an os", 142 }, 143 }, 144 "warn unused arch field": { 145 glideYaml{ 146 Imports: []glidePackage{ 147 { 148 Name: importertest.Project, 149 Arch: "i686", 150 }, 151 }}, 152 glideLock{}, 153 importertest.TestCase{ 154 WantWarning: "specified an arch", 155 }, 156 }, 157 } 158 159 for name, testCase := range testCases { 160 name := name 161 testCase := testCase 162 t.Run(name, func(t *testing.T) { 163 err := testCase.Execute(t, func(logger *log.Logger, sm gps.SourceManager) (*dep.Manifest, *dep.Lock) { 164 g := NewImporter(logger, true, sm) 165 g.glideConfig = testCase.yaml 166 g.glideLock = testCase.lock 167 return g.convert(importertest.RootProject) 168 }) 169 if err != nil { 170 t.Fatalf("%#v", err) 171 } 172 }) 173 } 174 } 175 176 func TestGlideConfig_Import(t *testing.T) { 177 h := test.NewHelper(t) 178 defer h.Cleanup() 179 180 ctx := importertest.NewTestContext(h) 181 sm, err := ctx.SourceManager() 182 h.Must(err) 183 defer sm.Release() 184 185 h.TempDir(filepath.Join("src", importertest.RootProject)) 186 h.TempCopy(filepath.Join(importertest.RootProject, glideYamlName), "glide.yaml") 187 h.TempCopy(filepath.Join(importertest.RootProject, glideLockName), "glide.lock") 188 projectRoot := h.Path(importertest.RootProject) 189 190 // Capture stderr so we can verify output 191 verboseOutput := &bytes.Buffer{} 192 ctx.Err = log.New(verboseOutput, "", 0) 193 194 g := NewImporter(ctx.Err, false, sm) // Disable verbose so that we don't print values that change each test run 195 if !g.HasDepMetadata(projectRoot) { 196 t.Fatal("Expected the importer to detect the glide configuration files") 197 } 198 199 m, l, err := g.Import(projectRoot, importertest.RootProject) 200 h.Must(err) 201 202 if m == nil { 203 t.Fatal("Expected the manifest to be generated") 204 } 205 206 if l == nil { 207 t.Fatal("Expected the lock to be generated") 208 } 209 210 goldenFile := "golden.txt" 211 got := verboseOutput.String() 212 want := h.GetTestFileString(goldenFile) 213 if want != got { 214 if *test.UpdateGolden { 215 if err := h.WriteTestFile(goldenFile, got); err != nil { 216 t.Fatalf("%+v", errors.Wrapf(err, "Unable to write updated golden file %s", goldenFile)) 217 } 218 } else { 219 t.Fatalf("want %s, got %s", want, got) 220 } 221 } 222 }