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  }