github.com/comcast/canticle@v0.0.0-20161108184242-c53cface56e8/canticles/depreader_test.go (about) 1 package canticles 2 3 import ( 4 "fmt" 5 "io/ioutil" 6 "os" 7 "path" 8 "reflect" 9 "testing" 10 ) 11 12 func TestCanticleDependencies(t *testing.T) { 13 dr := &DepReader{os.ExpandEnv("$GOPATH")} 14 15 // Happy path 16 deps, err := dr.CanticleDependencies("github.com/Comcast/Canticle") 17 if err != nil { 18 t.Errorf("Error reading valid Canticle file %s error: %s", "github.com/Comcast/Canticle", err.Error()) 19 } 20 if deps == nil { 21 t.Errorf("ReadCanticleDependencies should never return nil deps") 22 return 23 } 24 if len(deps) != 1 { 25 t.Errorf("ReadCanticleDependencies returned unexpected number of deps %d", len(deps)) 26 } 27 expected := &CanticleDependency{ 28 Revision: "e4a1c78f0f69fbde8bb74f5e9f4adb037a68d753", 29 SourcePath: "https://go.googlesource.com/tools", 30 Root: "golang.org/x/tools", 31 } 32 if !reflect.DeepEqual(expected, deps[0]) { 33 t.Errorf("Error reading cant deps: %v != %v", expected, deps[0]) 34 } 35 36 // Not so happy path 37 deps, err = dr.CanticleDependencies("github.comcast.com/viper-cog/nothere") 38 if err == nil { 39 t.Errorf("ReadCanticleDependencies returned nil error loading invalid path") 40 } 41 if len(deps) != 0 { 42 t.Errorf("ReadCanticleDependencies returned non zero length deps loading invalid path") 43 } 44 } 45 46 /* 47 func TestReadAllDeps(t *testing.T) { 48 dir, err := ioutil.TempDir("", "cant-test") 49 if err != nil { 50 t.Fatalf("Could not create tmp directory with err %s", err.Error()) 51 } 52 defer os.Remove(dir) 53 54 // Create our file hierarchy 55 paths := []string{"cubicle", "sosicle", ".fascicle"} 56 for _, s := range paths { 57 p := path.Join(dir, "src", "canttest", s) 58 if err := os.MkdirAll(p, 0755); err != nil { 59 t.Fatalf("Could not create tmp directory with err %s", err.Error()) 60 } 61 } 62 63 // Add Canticle files 64 tragical := &Dependency{ 65 Root: "tragic.com/tragical", 66 Revision: "Oedipus", 67 } 68 cubicle := &Dependency{ 69 Root: "hell.com/cubicle", 70 Revision: "hell", 71 } 72 fascicle := &Dependency{ 73 Root: "elsewhere.com/fascicle", 74 Revision: "a seperately published work", 75 } 76 f, err := os.Create(path.Join(dir, "src", "canttest", "Canticle")) 77 if err != nil { 78 t.Fatalf("Error creating files for test %s", err.Error()) 79 } 80 defer f.Close() 81 deps := NewDependencies() 82 deps.AddDependency(tragical) 83 err = json.NewEncoder(f).Encode(deps) 84 if err != nil { 85 t.Fatalf("Error writing files for test %s", err.Error()) 86 } 87 88 f1, err := os.Create(path.Join(dir, "src", "canttest", "cubicle", "Canticle")) 89 if err != nil { 90 t.Fatalf("Error creating files for test %s", err.Error()) 91 } 92 defer f1.Close() 93 deps = NewDependencies() 94 deps.AddDependency(cubicle) 95 err = json.NewEncoder(f1).Encode(deps) 96 if err != nil { 97 t.Fatalf("Error writing files for test %s", err.Error()) 98 } 99 100 f2, err := os.Create(path.Join(dir, "src", "canttest", ".fascicle", "Canticle")) 101 if err != nil { 102 t.Fatalf("Error creating files for test %s", err.Error()) 103 } 104 defer f2.Close() 105 deps = NewDependencies() 106 deps.AddDependency(fascicle) 107 err = json.NewEncoder(f2).Encode(deps) 108 if err != nil { 109 t.Fatalf("Error writing files for test %s", err.Error()) 110 } 111 112 // Setup all complete, lets read all our Canticle deps 113 dr := &DepReader{dir} 114 115 // Happy path 116 result, err := dr.ReadAllCantDeps("canttest") 117 if err != nil { 118 t.Errorf("Error reading valid Canticle files %s error: %s", "canttest", err.Error()) 119 } 120 if result == nil { 121 t.Errorf("ReadAllCantDeps should never return nil deps") 122 return 123 } 124 if len(result) != 2 { 125 t.Errorf("ReadAllCantDeps returned unexpected number of deps %d", len(result)) 126 } 127 } 128 129 func setupTestPath(t *testing.T) (string, error) { 130 dir, err := ioutil.TempDir("", "cant-test") 131 if err != nil { 132 t.Fatalf("Could not create tmp directory with err %s", err.Error()) 133 return "", err 134 } 135 136 // Create our file hierarchy 137 paths := []string{"test.com/cubicle", "test.com/cubicle/sosicle", "test.com/fascicle"} 138 for _, s := range paths { 139 p := PackageSource(dir, s) 140 if err := os.MkdirAll(p, 0755); err != nil { 141 t.Fatalf("Could not create tmp directory with err %s", err.Error()) 142 return "", err 143 } 144 f, err := os.Create(path.Join(p, "test.go")) 145 if err != nil { 146 t.Fatalf("Could not create tmp file with err %s", err.Error()) 147 return "", err 148 } 149 defer f.Close() 150 151 s := "package " + filepath.Base(p) + "\nimport _ \"test.com/fascicle\"" 152 _, err = f.Write([]byte(s)) 153 if err != nil { 154 t.Fatalf("Could not write to tmp file with err %s", err.Error()) 155 return "", err 156 } 157 } 158 159 // Sub dir with no buildable go files 160 p := PackageSource(dir, "test.com/cubicle/empty") 161 if err := os.MkdirAll(PackageSource(dir, p), 0755); err != nil { 162 t.Fatalf("Could not create tmp directory with err %s", err.Error()) 163 return "", err 164 } 165 166 return dir, nil 167 168 } 169 170 func TestReadAllRemoteDeps(t *testing.T) { 171 dir, err := setupTestPath(t) 172 if err != nil { 173 return 174 } 175 //defer os.Remove(dir) 176 // Setup all complete, lets read all our Canticle deps 177 dr := &DepReader{dir} 178 179 result, err := dr.ReadAllRemoteDependencies("test.com/cubicle") 180 if err != nil { 181 t.Errorf("Error reading valid pkg files %s error: %s", "test.com/cubicle", err.Error()) 182 } 183 if result == nil { 184 t.Errorf("ReadAllRemoteDeps should never return nil deps") 185 return 186 } 187 if len(result) != 1 { 188 t.Errorf("ReadAllCantDeps returned unexpected number of deps %d", len(result)) 189 } 190 } 191 192 func TestReadRemoteDependencies(t *testing.T) { 193 dr := &DepReader{os.ExpandEnv("$GOPATH")} 194 195 // Happy path 196 deps, err := dr.ReadRemoteDependencies("github.com/Comcast/Canticle") 197 if err != nil { 198 t.Errorf("Error reading remotes for valid package %s error: %s", "github.com/Comcast/Canticle", err.Error()) 199 } 200 if deps == nil { 201 t.Errorf("ReadRemoteDependencies should never return nil deps") 202 return 203 } 204 if len(deps) != 1 { 205 t.Errorf("ReadRemoteDependencies read incorrect number of deps") 206 } 207 208 expected := "github.com/Comcast/Canticle/canticles" 209 if deps[0] != expected { 210 t.Errorf("ReadCanticleDependencies returned %+v expected %+v", deps[0], expected) 211 } 212 213 // Not so happy path 214 deps, err = dr.ReadRemoteDependencies("github.comcast.com/viper-cog/nothere") 215 if err == nil { 216 t.Errorf("ReadRemoteDependencies returned nil error loading invalid path") 217 } 218 if deps == nil { 219 t.Errorf("ReadRemoteDependencies should never return nil deps") 220 } 221 if len(deps) != 0 { 222 t.Errorf("ReadRemoteDependencies returned non zero length deps loading invalid path") 223 } 224 } 225 */ 226 func TestReadDependencies(t *testing.T) { 227 dr := &DepReader{os.ExpandEnv("$GOPATH")} 228 229 // Happy path 230 deps, err := dr.GoRemoteDependencies("github.com/Comcast/Canticle/cant") 231 if err != nil { 232 t.Errorf("Error reading remotes for valid package %s error: %s", "github.com/Comcast/Canticle", err.Error()) 233 } 234 if deps == nil { 235 t.Errorf("ReadRemoteDependencies should never return nil deps") 236 return 237 } 238 if len(deps) != 2 { 239 t.Errorf("ReadRemoteDependencies read incorrect number of deps, got %d, expected %d", len(deps), 2) 240 } 241 expected := "github.com/Comcast/Canticle/buildinfo" 242 if expected != deps[0] { 243 t.Errorf("ReadRemoteDependencies returned %+v expected %+v", deps[0], expected) 244 } 245 expected = "github.com/Comcast/Canticle/canticles" 246 if expected != deps[1] { 247 t.Errorf("ReadRemoteDependencies returned %+v expected %+v", deps[1], expected) 248 } 249 250 // Not so happy path 251 deps, err = dr.GoRemoteDependencies("github.comcast.com/viper-cog/nothere") 252 if err == nil { 253 t.Errorf("ReadRemoteDependencies returned nil error loading invalid path") 254 } 255 if deps == nil { 256 t.Errorf("ReadRemoteDependencies should never return nil deps") 257 } 258 if len(deps) != 0 { 259 t.Errorf("ReadRemoteDependencies returned non zero length deps loading invalid path") 260 } 261 262 // Overriding path 263 // Make a temp dir to copy these files into 264 var testHome string 265 testHome, err = ioutil.TempDir("", "cant-test") 266 if err != nil { 267 t.Fatalf("Error creating test dir: %s", err.Error()) 268 } 269 defer os.RemoveAll(testHome) 270 271 // Copy the files over 272 testDir := path.Join(testHome, "src", "github.com/Comcast/Canticle") 273 source := path.Join(os.ExpandEnv("$GOPATH"), "src", "github.com/Comcast/Canticle") 274 dc := NewDirCopier(source, testDir) 275 if err := dc.Copy(); err != nil { 276 fmt.Printf("Error copying files %s\n", err.Error()) 277 } 278 279 // Test ourselves 280 dr.Gopath = testHome 281 deps, err = dr.GoRemoteDependencies("github.com/Comcast/Canticle/cant") 282 if err != nil { 283 t.Errorf("Error reading remotes for valid package %s error: %s", "github.com/Comcast/Canticle", err.Error()) 284 } 285 if deps == nil { 286 t.Errorf("ReadRemoteDependencies should never return nil deps") 287 return 288 } 289 if len(deps) != 2 { 290 t.Errorf("ReadRemoteDependencies read incorrect number of deps, got %d, expected %d", len(deps), 2) 291 } 292 expected = "github.com/Comcast/Canticle/buildinfo" 293 if expected != deps[0] { 294 t.Errorf("ReadRemoteDependencies returned %+v expected %+v", deps[0], expected) 295 } 296 expected = "github.com/Comcast/Canticle/canticles" 297 if expected != deps[1] { 298 t.Errorf("ReadRemoteDependencies returned %+v expected %+v", deps[1], expected) 299 } 300 }