go.fuchsia.dev/jiri@v0.0.0-20240502161911-b66513b29486/cmd/jiri/project_test.go (about) 1 // Copyright 2020 The Fuchsia 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 main 6 7 import ( 8 "encoding/json" 9 "fmt" 10 "os" 11 "path/filepath" 12 "testing" 13 14 "go.fuchsia.dev/jiri/jiritest" 15 "go.fuchsia.dev/jiri/project" 16 ) 17 18 func TestProjectIgnoresByAttribute(t *testing.T) { 19 fake, cleanup := jiritest.NewFakeJiriRoot(t) 20 defer cleanup() 21 22 // Set up projects and packages with explict attributes 23 numProjects := 3 24 numOptionalProjects := 2 25 localProjects := []project.Project{} 26 totalProjects := numProjects + numOptionalProjects 27 // Project info returns the manifest project info as well. 28 numManifestProjects := 1 29 30 createRemoteProj := func(i int, attributes string) { 31 name := projectName(i) 32 path := fmt.Sprintf("path-%d", i) 33 if err := fake.CreateRemoteProject(name); err != nil { 34 t.Fatalf("failed to create remote project due to error: %v", err) 35 } 36 p := project.Project{ 37 Name: name, 38 Path: filepath.Join(fake.X.Root, path), 39 Remote: fake.Projects[name], 40 Attributes: attributes, 41 } 42 localProjects = append(localProjects, p) 43 if err := fake.AddProject(p); err != nil { 44 t.Fatalf("failed to add a project to manifest due to error: %v", err) 45 } 46 } 47 48 for i := 0; i < numProjects; i++ { 49 createRemoteProj(i, "") 50 } 51 52 for i := numProjects; i < totalProjects; i++ { 53 createRemoteProj(i, "optional") 54 } 55 56 // Create initial commit in each repo. 57 for _, remoteProjectDir := range fake.Projects { 58 writeReadme(t, fake.X, remoteProjectDir, "initial readme") 59 } 60 61 // Try default mode 62 fake.X.FetchingAttrs = "" 63 fake.UpdateUniverse(true) 64 65 file, err := os.CreateTemp("", "tmp") 66 if err != nil { 67 t.Fatal(err) 68 } 69 defer os.Remove(file.Name()) 70 71 jsonOutputFlag = file.Name() 72 useRemoteProjects = true 73 74 err = runProject(fake.X, []string{}) 75 if err != nil { 76 t.Fatal(err) 77 } 78 file.Close() 79 80 var projectInfo []projectInfoOutput 81 bytes, err := os.ReadFile(file.Name()) 82 if err != nil { 83 t.Fatal(err) 84 } 85 err = json.Unmarshal(bytes, &projectInfo) 86 if err != nil { 87 t.Fatal(err) 88 } 89 90 expectedProjects := numProjects + numManifestProjects 91 92 if len(projectInfo) != expectedProjects { 93 t.Errorf("Unexpected number of projects returned (%d, %d) (want, got)\n%v", expectedProjects, len(projectInfo), projectInfo) 94 } 95 96 // Try attributes 97 fake.X.FetchingAttrs = "optional" 98 fake.UpdateUniverse(true) 99 100 file2, err := os.CreateTemp("", "tmp") 101 if err != nil { 102 t.Fatal(err) 103 } 104 defer os.Remove(file2.Name()) 105 106 jsonOutputFlag = file2.Name() 107 108 err = runProject(fake.X, []string{}) 109 if err != nil { 110 t.Fatal(err) 111 } 112 file2.Close() 113 114 bytes, err = os.ReadFile(file2.Name()) 115 if err != nil { 116 t.Fatal(err) 117 } 118 err = json.Unmarshal(bytes, &projectInfo) 119 if err != nil { 120 t.Fatal(err) 121 } 122 123 expectedProjects = totalProjects + numManifestProjects 124 125 if len(projectInfo) != expectedProjects { 126 t.Errorf("Unexpected number of projects returned (%d, %d) (want, got)\n%v", expectedProjects, len(projectInfo), projectInfo) 127 } 128 }