github.com/m-lab/locate@v0.17.6/cmd/heartbeat/metadata/gcp_test.go (about) 1 package metadata 2 3 import ( 4 "errors" 5 "fmt" 6 "reflect" 7 "testing" 8 ) 9 10 func TestNewGCPMetadata(t *testing.T) { 11 tests := []struct { 12 name string 13 client Client 14 hostname string 15 want *GCPMetadata 16 wantErr bool 17 }{ 18 { 19 name: "success", 20 client: &fakeClient{ 21 proj: "mlab-sandbox", 22 zone: "us-west1-a", 23 }, 24 hostname: "ndt-mlab1-lga0t.mlab-sandbox.measurement-lab.org-t95j", 25 want: &GCPMetadata{ 26 project: "mlab-sandbox", 27 backend: "mlab1-lga0t-mlab-sandbox-measurement-lab-org", 28 region: "us-west1", 29 group: fmt.Sprintf(groupTemplate, "mlab-sandbox", "us-west1", "mlab1-lga0t-mlab-sandbox-measurement-lab-org"), 30 }, 31 wantErr: false, 32 }, 33 { 34 name: "invalid-hostname", 35 client: &fakeClient{ 36 proj: "mlab-sandbox", 37 zone: "us-west1-a", 38 }, 39 hostname: "invalid-hostname", 40 want: nil, 41 wantErr: true, 42 }, 43 { 44 name: "invalid-proj", 45 client: &fakeClient{ 46 projErr: true, 47 }, 48 hostname: "ndt-mlab1-lga0t.mlab-sandbox.measurement-lab.org-t95j", 49 want: nil, 50 wantErr: true, 51 }, 52 { 53 name: "invalid-zone", 54 client: &fakeClient{ 55 zoneErr: true, 56 }, 57 hostname: "ndt-mlab1-lga0t.mlab-sandbox.measurement-lab.org-t95j", 58 want: nil, 59 wantErr: true, 60 }, 61 } 62 for _, tt := range tests { 63 t.Run(tt.name, func(t *testing.T) { 64 got, err := NewGCPMetadata(tt.client, tt.hostname) 65 if (err != nil) != tt.wantErr { 66 t.Errorf("NewGCPMetadata() error = %v, wantErr %v", err, tt.wantErr) 67 return 68 } 69 if !reflect.DeepEqual(got, tt.want) { 70 t.Errorf("NewGCPMetadata() = %v, want %v", got, tt.want) 71 } 72 }) 73 } 74 } 75 76 type fakeClient struct { 77 proj string 78 projErr bool 79 zone string 80 zoneErr bool 81 } 82 83 func (fc *fakeClient) ProjectID() (string, error) { 84 if fc.projErr { 85 return "", errors.New("project error") 86 } 87 return fc.proj, nil 88 } 89 90 func (fc *fakeClient) Zone() (string, error) { 91 if fc.zoneErr { 92 return "", errors.New("zone error") 93 } 94 return fc.zone, nil 95 } 96 97 func TestGCPMetadata_Project(t *testing.T) { 98 wantProj := "fake-project" 99 m := &GCPMetadata{ 100 project: wantProj, 101 } 102 if got := m.Project(); got != wantProj { 103 t.Errorf("GCPMetadata.Project() = %v, want %v", got, wantProj) 104 } 105 } 106 107 func TestGCPMetadata_Backend(t *testing.T) { 108 wantBackend := "fake-backend" 109 m := &GCPMetadata{ 110 backend: wantBackend, 111 } 112 if got := m.Backend(); got != wantBackend { 113 t.Errorf("GCPMetadata.Backend() = %v, want %v", got, wantBackend) 114 } 115 } 116 117 func TestGCPMetadata_Region(t *testing.T) { 118 wantRegion := "fake-region" 119 m := &GCPMetadata{ 120 region: wantRegion, 121 } 122 if got := m.Region(); got != wantRegion { 123 t.Errorf("GCPMetadata.Region() = %v, want %v", got, wantRegion) 124 } 125 } 126 127 func TestGCPMetadata_Group(t *testing.T) { 128 wantGroup := "fake-group" 129 m := &GCPMetadata{ 130 group: wantGroup, 131 } 132 if got := m.Group(); got != wantGroup { 133 t.Errorf("GCPMetadata.Group() = %v, want %v", got, wantGroup) 134 } 135 }