package waagent import ( "encoding/json" "os" "reflect" "testing" ) type mockFilesystem map[string][]byte func (m mockFilesystem) readFile(filename string) ([]byte, error) { if contents := m[filename]; contents != nil { return contents, nil } return nil, os.ErrNotExist } func TestFetchMetadata(t *testing.T) { for _, tt := range []struct { root string files mockFilesystem metadata map[string]string }{ { "/", mockFilesystem{}, nil, }, { "/", mockFilesystem{"/SharedConfig.xml": []byte("")}, nil, }, { "/var/lib/waagent", mockFilesystem{"/var/lib/waagent/SharedConfig.xml": []byte("")}, nil, }, { "/var/lib/waagent", mockFilesystem{"/var/lib/waagent/SharedConfig.xml": []byte(` `)}, map[string]string{ "local-ipv4": "100.73.202.64", "public-ipv4": "191.239.39.77", }, }, } { a := waagent{tt.root, tt.files.readFile} metadataBytes, err := a.FetchMetadata() if err != nil { t.Fatalf("bad error for %q: want %q, got %q", tt, nil, err) } var metadata map[string]string if len(metadataBytes) > 0 { if err := json.Unmarshal(metadataBytes, &metadata); err != nil { panic(err) } } if !reflect.DeepEqual(tt.metadata, metadata) { t.Fatalf("bad metadata for %q: want %q, got %q", tt, tt.metadata, metadata) } } } func TestFetchUserdata(t *testing.T) { for _, tt := range []struct { root string files mockFilesystem }{ { "/", mockFilesystem{}, }, { "/", mockFilesystem{"/CustomData": []byte{}}, }, { "/var/lib/waagent/", mockFilesystem{"/var/lib/waagent/CustomData": []byte{}}, }, } { a := waagent{tt.root, tt.files.readFile} _, err := a.FetchUserdata() if err != nil { t.Fatalf("bad error for %q: want %q, got %q", tt, nil, err) } } } func TestConfigRoot(t *testing.T) { for _, tt := range []struct { root string configRoot string }{ { "/", "/", }, { "/var/lib/waagent", "/var/lib/waagent", }, } { a := waagent{tt.root, nil} if configRoot := a.ConfigRoot(); configRoot != tt.configRoot { t.Fatalf("bad config root for %q: want %q, got %q", tt, tt.configRoot, configRoot) } } } func TestNewDatasource(t *testing.T) { for _, tt := range []struct { root string expectRoot string }{ { root: "", expectRoot: "", }, { root: "/var/lib/waagent", expectRoot: "/var/lib/waagent", }, } { service := NewDatasource(tt.root) if service.root != tt.expectRoot { t.Fatalf("bad root (%q): want %q, got %q", tt.root, tt.expectRoot, service.root) } } }