| package storage |
|
|
| import ( |
| "encoding/json" |
| "io/ioutil" |
| "log" |
| "os" |
| "testing" |
|
|
| "github.com/play-with-docker/play-with-docker/pwd/types" |
| "github.com/stretchr/testify/assert" |
| ) |
|
|
| func TestSessionPut(t *testing.T) { |
| tmpfile, err := ioutil.TempFile("", "pwd") |
| if err != nil { |
| log.Fatal(err) |
| } |
| tmpfile.Close() |
| os.Remove(tmpfile.Name()) |
| defer os.Remove(tmpfile.Name()) |
|
|
| storage, err := NewFileStorage(tmpfile.Name()) |
|
|
| assert.Nil(t, err) |
|
|
| s := &types.Session{Id: "a session"} |
| err = storage.SessionPut(s) |
|
|
| assert.Nil(t, err) |
|
|
| expectedDB := &DB{ |
| Sessions: map[string]*types.Session{s.Id: s}, |
| Instances: map[string]*types.Instance{}, |
| Clients: map[string]*types.Client{}, |
| WindowsInstances: map[string]*types.WindowsInstance{}, |
| LoginRequests: map[string]*types.LoginRequest{}, |
| Users: map[string]*types.User{}, |
| Playgrounds: map[string]*types.Playground{}, |
| WindowsInstancesBySessionId: map[string][]string{}, |
| InstancesBySessionId: map[string][]string{}, |
| ClientsBySessionId: map[string][]string{}, |
| UsersByProvider: map[string]string{}, |
| } |
| var loadedDB *DB |
|
|
| file, err := os.Open(tmpfile.Name()) |
|
|
| assert.Nil(t, err) |
| defer file.Close() |
|
|
| decoder := json.NewDecoder(file) |
| err = decoder.Decode(&loadedDB) |
|
|
| assert.Nil(t, err) |
|
|
| assert.EqualValues(t, expectedDB, loadedDB) |
| } |
|
|
| func TestSessionGet(t *testing.T) { |
| expectedSession := &types.Session{Id: "aaabbbccc"} |
| expectedDB := &DB{ |
| Sessions: map[string]*types.Session{expectedSession.Id: expectedSession}, |
| Instances: map[string]*types.Instance{}, |
| Clients: map[string]*types.Client{}, |
| WindowsInstances: map[string]*types.WindowsInstance{}, |
| LoginRequests: map[string]*types.LoginRequest{}, |
| Users: map[string]*types.User{}, |
| Playgrounds: map[string]*types.Playground{}, |
| WindowsInstancesBySessionId: map[string][]string{}, |
| InstancesBySessionId: map[string][]string{}, |
| ClientsBySessionId: map[string][]string{}, |
| UsersByProvider: map[string]string{}, |
| } |
|
|
| tmpfile, err := ioutil.TempFile("", "pwd") |
| if err != nil { |
| log.Fatal(err) |
| } |
| encoder := json.NewEncoder(tmpfile) |
| err = encoder.Encode(&expectedDB) |
| assert.Nil(t, err) |
| tmpfile.Close() |
| defer os.Remove(tmpfile.Name()) |
|
|
| storage, err := NewFileStorage(tmpfile.Name()) |
|
|
| assert.Nil(t, err) |
|
|
| _, err = storage.SessionGet("foobar") |
| assert.True(t, NotFound(err)) |
|
|
| loadedSession, err := storage.SessionGet("aaabbbccc") |
| assert.Nil(t, err) |
|
|
| assert.Equal(t, expectedSession, loadedSession) |
| } |
|
|
| func TestSessionGetAll(t *testing.T) { |
| s1 := &types.Session{Id: "aaabbbccc"} |
| s2 := &types.Session{Id: "dddeeefff"} |
| expectedDB := &DB{ |
| Sessions: map[string]*types.Session{s1.Id: s1, s2.Id: s2}, |
| Instances: map[string]*types.Instance{}, |
| Clients: map[string]*types.Client{}, |
| WindowsInstances: map[string]*types.WindowsInstance{}, |
| LoginRequests: map[string]*types.LoginRequest{}, |
| Users: map[string]*types.User{}, |
| Playgrounds: map[string]*types.Playground{}, |
| WindowsInstancesBySessionId: map[string][]string{}, |
| InstancesBySessionId: map[string][]string{}, |
| ClientsBySessionId: map[string][]string{}, |
| UsersByProvider: map[string]string{}, |
| } |
|
|
| tmpfile, err := ioutil.TempFile("", "pwd") |
| if err != nil { |
| log.Fatal(err) |
| } |
| encoder := json.NewEncoder(tmpfile) |
| err = encoder.Encode(&expectedDB) |
| assert.Nil(t, err) |
| tmpfile.Close() |
| defer os.Remove(tmpfile.Name()) |
|
|
| storage, err := NewFileStorage(tmpfile.Name()) |
|
|
| assert.Nil(t, err) |
|
|
| sessions, err := storage.SessionGetAll() |
| assert.Nil(t, err) |
|
|
| assert.Subset(t, sessions, []*types.Session{s1, s2}) |
| assert.Len(t, sessions, 2) |
| } |
|
|
| func TestSessionDelete(t *testing.T) { |
| tmpfile, err := ioutil.TempFile("", "pwd") |
| if err != nil { |
| log.Fatal(err) |
| } |
| tmpfile.Close() |
| os.Remove(tmpfile.Name()) |
| defer os.Remove(tmpfile.Name()) |
|
|
| storage, err := NewFileStorage(tmpfile.Name()) |
|
|
| assert.Nil(t, err) |
|
|
| s1 := &types.Session{Id: "session1"} |
| err = storage.SessionPut(s1) |
| assert.Nil(t, err) |
|
|
| found, err := storage.SessionGet(s1.Id) |
| assert.Nil(t, err) |
| assert.Equal(t, s1, found) |
|
|
| err = storage.SessionDelete(s1.Id) |
| assert.Nil(t, err) |
|
|
| found, err = storage.SessionGet(s1.Id) |
| assert.True(t, NotFound(err)) |
| assert.Nil(t, found) |
| } |
|
|
| func TestInstanceGet(t *testing.T) { |
| expectedInstance := &types.Instance{SessionId: "aaabbbccc", Name: "i1", IP: "10.0.0.1"} |
| expectedDB := &DB{ |
| Sessions: map[string]*types.Session{}, |
| Instances: map[string]*types.Instance{expectedInstance.Name: expectedInstance}, |
| Clients: map[string]*types.Client{}, |
| WindowsInstances: map[string]*types.WindowsInstance{}, |
| LoginRequests: map[string]*types.LoginRequest{}, |
| Users: map[string]*types.User{}, |
| Playgrounds: map[string]*types.Playground{}, |
| WindowsInstancesBySessionId: map[string][]string{}, |
| InstancesBySessionId: map[string][]string{expectedInstance.SessionId: []string{expectedInstance.Name}}, |
| ClientsBySessionId: map[string][]string{}, |
| UsersByProvider: map[string]string{}, |
| } |
|
|
| tmpfile, err := ioutil.TempFile("", "pwd") |
| if err != nil { |
| log.Fatal(err) |
| } |
| encoder := json.NewEncoder(tmpfile) |
| err = encoder.Encode(&expectedDB) |
| assert.Nil(t, err) |
| tmpfile.Close() |
| defer os.Remove(tmpfile.Name()) |
|
|
| storage, err := NewFileStorage(tmpfile.Name()) |
|
|
| assert.Nil(t, err) |
|
|
| foundInstance, err := storage.InstanceGet("i1") |
| assert.Nil(t, err) |
| assert.Equal(t, expectedInstance, foundInstance) |
| } |
|
|
| func TestInstancePut(t *testing.T) { |
| tmpfile, err := ioutil.TempFile("", "pwd") |
| if err != nil { |
| log.Fatal(err) |
| } |
| tmpfile.Close() |
| os.Remove(tmpfile.Name()) |
| defer os.Remove(tmpfile.Name()) |
|
|
| storage, err := NewFileStorage(tmpfile.Name()) |
|
|
| assert.Nil(t, err) |
|
|
| s := &types.Session{Id: "aaabbbccc"} |
| i := &types.Instance{Name: "i1", IP: "10.0.0.1", SessionId: s.Id} |
|
|
| err = storage.SessionPut(s) |
| assert.Nil(t, err) |
|
|
| err = storage.InstancePut(i) |
| assert.Nil(t, err) |
|
|
| expectedDB := &DB{ |
| Sessions: map[string]*types.Session{s.Id: s}, |
| Instances: map[string]*types.Instance{i.Name: i}, |
| Clients: map[string]*types.Client{}, |
| WindowsInstances: map[string]*types.WindowsInstance{}, |
| LoginRequests: map[string]*types.LoginRequest{}, |
| Users: map[string]*types.User{}, |
| Playgrounds: map[string]*types.Playground{}, |
| WindowsInstancesBySessionId: map[string][]string{}, |
| InstancesBySessionId: map[string][]string{i.SessionId: []string{i.Name}}, |
| ClientsBySessionId: map[string][]string{}, |
| UsersByProvider: map[string]string{}, |
| } |
| var loadedDB *DB |
|
|
| file, err := os.Open(tmpfile.Name()) |
|
|
| assert.Nil(t, err) |
| defer file.Close() |
|
|
| decoder := json.NewDecoder(file) |
| err = decoder.Decode(&loadedDB) |
|
|
| assert.Nil(t, err) |
|
|
| assert.EqualValues(t, expectedDB, loadedDB) |
| } |
|
|
| func TestInstanceDelete(t *testing.T) { |
| tmpfile, err := ioutil.TempFile("", "pwd") |
| if err != nil { |
| log.Fatal(err) |
| } |
| tmpfile.Close() |
| os.Remove(tmpfile.Name()) |
| defer os.Remove(tmpfile.Name()) |
|
|
| storage, err := NewFileStorage(tmpfile.Name()) |
|
|
| assert.Nil(t, err) |
|
|
| s := &types.Session{Id: "session1"} |
| err = storage.SessionPut(s) |
| assert.Nil(t, err) |
|
|
| i := &types.Instance{Name: "i1", IP: "10.0.0.1", SessionId: s.Id} |
| err = storage.InstancePut(i) |
| assert.Nil(t, err) |
|
|
| found, err := storage.InstanceGet(i.Name) |
| assert.Nil(t, err) |
| assert.Equal(t, i, found) |
|
|
| err = storage.InstanceDelete(i.Name) |
| assert.Nil(t, err) |
|
|
| found, err = storage.InstanceGet(i.Name) |
| assert.True(t, NotFound(err)) |
| assert.Nil(t, found) |
| } |
|
|
| func TestInstanceFindBySessionId(t *testing.T) { |
| i1 := &types.Instance{SessionId: "aaabbbccc", Name: "c1"} |
| i2 := &types.Instance{SessionId: "aaabbbccc", Name: "c2"} |
| expectedDB := &DB{ |
| Sessions: map[string]*types.Session{}, |
| Instances: map[string]*types.Instance{i1.Name: i1, i2.Name: i2}, |
| Clients: map[string]*types.Client{}, |
| WindowsInstances: map[string]*types.WindowsInstance{}, |
| LoginRequests: map[string]*types.LoginRequest{}, |
| Users: map[string]*types.User{}, |
| Playgrounds: map[string]*types.Playground{}, |
| WindowsInstancesBySessionId: map[string][]string{}, |
| InstancesBySessionId: map[string][]string{i1.SessionId: []string{i1.Name, i2.Name}}, |
| ClientsBySessionId: map[string][]string{}, |
| UsersByProvider: map[string]string{}, |
| } |
|
|
| tmpfile, err := ioutil.TempFile("", "pwd") |
| if err != nil { |
| log.Fatal(err) |
| } |
| encoder := json.NewEncoder(tmpfile) |
| err = encoder.Encode(&expectedDB) |
| assert.Nil(t, err) |
| tmpfile.Close() |
| defer os.Remove(tmpfile.Name()) |
|
|
| storage, err := NewFileStorage(tmpfile.Name()) |
|
|
| assert.Nil(t, err) |
|
|
| instances, err := storage.InstanceFindBySessionId("aaabbbccc") |
| assert.Nil(t, err) |
| assert.Subset(t, instances, []*types.Instance{i1, i2}) |
| assert.Len(t, instances, 2) |
| } |
|
|
| func TestWindowsInstanceGetAll(t *testing.T) { |
| i1 := &types.WindowsInstance{SessionId: "aaabbbccc", Id: "i1"} |
| i2 := &types.WindowsInstance{SessionId: "aaabbbccc", Id: "i2"} |
| expectedDB := &DB{ |
| Sessions: map[string]*types.Session{}, |
| Instances: map[string]*types.Instance{}, |
| Clients: map[string]*types.Client{}, |
| WindowsInstances: map[string]*types.WindowsInstance{i1.Id: i1, i2.Id: i2}, |
| LoginRequests: map[string]*types.LoginRequest{}, |
| Users: map[string]*types.User{}, |
| Playgrounds: map[string]*types.Playground{}, |
| WindowsInstancesBySessionId: map[string][]string{i1.SessionId: []string{i1.Id, i2.Id}}, |
| InstancesBySessionId: map[string][]string{}, |
| ClientsBySessionId: map[string][]string{}, |
| UsersByProvider: map[string]string{}, |
| } |
|
|
| tmpfile, err := ioutil.TempFile("", "pwd") |
| if err != nil { |
| log.Fatal(err) |
| } |
| encoder := json.NewEncoder(tmpfile) |
| err = encoder.Encode(&expectedDB) |
| assert.Nil(t, err) |
| tmpfile.Close() |
| defer os.Remove(tmpfile.Name()) |
|
|
| storage, err := NewFileStorage(tmpfile.Name()) |
|
|
| assert.Nil(t, err) |
|
|
| instances, err := storage.WindowsInstanceGetAll() |
| assert.Nil(t, err) |
| assert.Subset(t, instances, []*types.WindowsInstance{i1, i2}) |
| assert.Len(t, instances, 2) |
| } |
|
|
| func TestWindowsInstancePut(t *testing.T) { |
| tmpfile, err := ioutil.TempFile("", "pwd") |
| if err != nil { |
| log.Fatal(err) |
| } |
| tmpfile.Close() |
| os.Remove(tmpfile.Name()) |
| defer os.Remove(tmpfile.Name()) |
|
|
| storage, err := NewFileStorage(tmpfile.Name()) |
|
|
| assert.Nil(t, err) |
|
|
| s := &types.Session{Id: "aaabbbccc"} |
| i := &types.WindowsInstance{Id: "i1", SessionId: s.Id} |
|
|
| err = storage.SessionPut(s) |
| assert.Nil(t, err) |
|
|
| err = storage.WindowsInstancePut(i) |
| assert.Nil(t, err) |
|
|
| expectedDB := &DB{ |
| Sessions: map[string]*types.Session{s.Id: s}, |
| Instances: map[string]*types.Instance{}, |
| Clients: map[string]*types.Client{}, |
| WindowsInstances: map[string]*types.WindowsInstance{i.Id: i}, |
| LoginRequests: map[string]*types.LoginRequest{}, |
| Users: map[string]*types.User{}, |
| Playgrounds: map[string]*types.Playground{}, |
| WindowsInstancesBySessionId: map[string][]string{i.SessionId: []string{i.Id}}, |
| InstancesBySessionId: map[string][]string{}, |
| ClientsBySessionId: map[string][]string{}, |
| UsersByProvider: map[string]string{}, |
| } |
| var loadedDB *DB |
|
|
| file, err := os.Open(tmpfile.Name()) |
|
|
| assert.Nil(t, err) |
| defer file.Close() |
|
|
| decoder := json.NewDecoder(file) |
| err = decoder.Decode(&loadedDB) |
|
|
| assert.Nil(t, err) |
|
|
| assert.EqualValues(t, expectedDB, loadedDB) |
| } |
|
|
| func TestWindowsInstanceDelete(t *testing.T) { |
| tmpfile, err := ioutil.TempFile("", "pwd") |
| if err != nil { |
| log.Fatal(err) |
| } |
| tmpfile.Close() |
| os.Remove(tmpfile.Name()) |
| defer os.Remove(tmpfile.Name()) |
|
|
| storage, err := NewFileStorage(tmpfile.Name()) |
|
|
| assert.Nil(t, err) |
|
|
| s := &types.Session{Id: "session1"} |
| err = storage.SessionPut(s) |
| assert.Nil(t, err) |
|
|
| i := &types.WindowsInstance{Id: "i1", SessionId: s.Id} |
| err = storage.WindowsInstancePut(i) |
| assert.Nil(t, err) |
|
|
| found, err := storage.WindowsInstanceGetAll() |
| assert.Nil(t, err) |
| assert.Equal(t, []*types.WindowsInstance{i}, found) |
|
|
| err = storage.WindowsInstanceDelete(i.Id) |
| assert.Nil(t, err) |
|
|
| found, err = storage.WindowsInstanceGetAll() |
| assert.Nil(t, err) |
| assert.Empty(t, found) |
| } |
|
|
| func TestClientGet(t *testing.T) { |
| c := &types.Client{SessionId: "aaabbbccc", Id: "c1"} |
| expectedDB := &DB{ |
| Sessions: map[string]*types.Session{}, |
| Instances: map[string]*types.Instance{}, |
| Clients: map[string]*types.Client{c.Id: c}, |
| WindowsInstances: map[string]*types.WindowsInstance{}, |
| LoginRequests: map[string]*types.LoginRequest{}, |
| Users: map[string]*types.User{}, |
| Playgrounds: map[string]*types.Playground{}, |
| WindowsInstancesBySessionId: map[string][]string{}, |
| InstancesBySessionId: map[string][]string{}, |
| ClientsBySessionId: map[string][]string{c.SessionId: []string{c.Id}}, |
| UsersByProvider: map[string]string{}, |
| } |
|
|
| tmpfile, err := ioutil.TempFile("", "pwd") |
| if err != nil { |
| log.Fatal(err) |
| } |
| encoder := json.NewEncoder(tmpfile) |
| err = encoder.Encode(&expectedDB) |
| assert.Nil(t, err) |
| tmpfile.Close() |
| defer os.Remove(tmpfile.Name()) |
|
|
| storage, err := NewFileStorage(tmpfile.Name()) |
|
|
| assert.Nil(t, err) |
|
|
| found, err := storage.ClientGet("c1") |
| assert.Nil(t, err) |
| assert.Equal(t, c, found) |
| } |
|
|
| func TestClientPut(t *testing.T) { |
| tmpfile, err := ioutil.TempFile("", "pwd") |
| if err != nil { |
| log.Fatal(err) |
| } |
| tmpfile.Close() |
| os.Remove(tmpfile.Name()) |
| defer os.Remove(tmpfile.Name()) |
|
|
| storage, err := NewFileStorage(tmpfile.Name()) |
|
|
| assert.Nil(t, err) |
|
|
| s := &types.Session{Id: "aaabbbccc"} |
| c := &types.Client{Id: "c1", SessionId: s.Id} |
|
|
| err = storage.SessionPut(s) |
| assert.Nil(t, err) |
|
|
| err = storage.ClientPut(c) |
| assert.Nil(t, err) |
|
|
| expectedDB := &DB{ |
| Sessions: map[string]*types.Session{s.Id: s}, |
| Instances: map[string]*types.Instance{}, |
| Clients: map[string]*types.Client{c.Id: c}, |
| WindowsInstances: map[string]*types.WindowsInstance{}, |
| LoginRequests: map[string]*types.LoginRequest{}, |
| Users: map[string]*types.User{}, |
| Playgrounds: map[string]*types.Playground{}, |
| WindowsInstancesBySessionId: map[string][]string{}, |
| InstancesBySessionId: map[string][]string{}, |
| ClientsBySessionId: map[string][]string{c.SessionId: []string{c.Id}}, |
| UsersByProvider: map[string]string{}, |
| } |
| var loadedDB *DB |
|
|
| file, err := os.Open(tmpfile.Name()) |
|
|
| assert.Nil(t, err) |
| defer file.Close() |
|
|
| decoder := json.NewDecoder(file) |
| err = decoder.Decode(&loadedDB) |
|
|
| assert.Nil(t, err) |
|
|
| assert.EqualValues(t, expectedDB, loadedDB) |
| } |
|
|
| func TestClientDelete(t *testing.T) { |
| tmpfile, err := ioutil.TempFile("", "pwd") |
| if err != nil { |
| log.Fatal(err) |
| } |
| tmpfile.Close() |
| os.Remove(tmpfile.Name()) |
| defer os.Remove(tmpfile.Name()) |
|
|
| storage, err := NewFileStorage(tmpfile.Name()) |
|
|
| assert.Nil(t, err) |
|
|
| s := &types.Session{Id: "session1"} |
| err = storage.SessionPut(s) |
| assert.Nil(t, err) |
|
|
| c := &types.Client{Id: "c1", SessionId: s.Id} |
| err = storage.ClientPut(c) |
| assert.Nil(t, err) |
|
|
| found, err := storage.ClientGet(c.Id) |
| assert.Nil(t, err) |
| assert.Equal(t, c, found) |
|
|
| err = storage.ClientDelete(c.Id) |
| assert.Nil(t, err) |
|
|
| found, err = storage.ClientGet(c.Id) |
| assert.True(t, NotFound(err)) |
| assert.Nil(t, found) |
| } |
|
|
| func TestClientFindBySessionId(t *testing.T) { |
| c1 := &types.Client{SessionId: "aaabbbccc", Id: "c1"} |
| c2 := &types.Client{SessionId: "aaabbbccc", Id: "c2"} |
| expectedDB := &DB{ |
| Sessions: map[string]*types.Session{}, |
| Instances: map[string]*types.Instance{}, |
| Clients: map[string]*types.Client{c1.Id: c1, c2.Id: c2}, |
| WindowsInstances: map[string]*types.WindowsInstance{}, |
| LoginRequests: map[string]*types.LoginRequest{}, |
| Users: map[string]*types.User{}, |
| Playgrounds: map[string]*types.Playground{}, |
| WindowsInstancesBySessionId: map[string][]string{}, |
| InstancesBySessionId: map[string][]string{}, |
| ClientsBySessionId: map[string][]string{c1.SessionId: []string{c1.Id, c2.Id}}, |
| UsersByProvider: map[string]string{}, |
| } |
|
|
| tmpfile, err := ioutil.TempFile("", "pwd") |
| if err != nil { |
| log.Fatal(err) |
| } |
| encoder := json.NewEncoder(tmpfile) |
| err = encoder.Encode(&expectedDB) |
| assert.Nil(t, err) |
| tmpfile.Close() |
| defer os.Remove(tmpfile.Name()) |
|
|
| storage, err := NewFileStorage(tmpfile.Name()) |
|
|
| assert.Nil(t, err) |
|
|
| clients, err := storage.ClientFindBySessionId("aaabbbccc") |
| assert.Nil(t, err) |
| assert.Subset(t, clients, []*types.Client{c1, c2}) |
| assert.Len(t, clients, 2) |
| } |
|
|
| func TestPlaygroundGet(t *testing.T) { |
| p := &types.Playground{Id: "aaabbbccc"} |
| expectedDB := &DB{ |
| Sessions: map[string]*types.Session{}, |
| Instances: map[string]*types.Instance{}, |
| Clients: map[string]*types.Client{}, |
| WindowsInstances: map[string]*types.WindowsInstance{}, |
| LoginRequests: map[string]*types.LoginRequest{}, |
| Users: map[string]*types.User{}, |
| Playgrounds: map[string]*types.Playground{p.Id: p}, |
| WindowsInstancesBySessionId: map[string][]string{}, |
| InstancesBySessionId: map[string][]string{}, |
| ClientsBySessionId: map[string][]string{}, |
| UsersByProvider: map[string]string{}, |
| } |
|
|
| tmpfile, err := ioutil.TempFile("", "pwd") |
| if err != nil { |
| log.Fatal(err) |
| } |
| encoder := json.NewEncoder(tmpfile) |
| err = encoder.Encode(&expectedDB) |
| assert.Nil(t, err) |
| tmpfile.Close() |
| defer os.Remove(tmpfile.Name()) |
|
|
| storage, err := NewFileStorage(tmpfile.Name()) |
|
|
| assert.Nil(t, err) |
|
|
| found, err := storage.PlaygroundGet("aaabbbccc") |
| assert.Nil(t, err) |
| assert.Equal(t, p, found) |
| } |
|
|
| func TestPlaygroundPut(t *testing.T) { |
| tmpfile, err := ioutil.TempFile("", "pwd") |
| if err != nil { |
| log.Fatal(err) |
| } |
| tmpfile.Close() |
| os.Remove(tmpfile.Name()) |
| defer os.Remove(tmpfile.Name()) |
|
|
| storage, err := NewFileStorage(tmpfile.Name()) |
|
|
| assert.Nil(t, err) |
|
|
| p := &types.Playground{Id: "aaabbbccc"} |
|
|
| err = storage.PlaygroundPut(p) |
| assert.Nil(t, err) |
|
|
| expectedDB := &DB{ |
| Sessions: map[string]*types.Session{}, |
| Instances: map[string]*types.Instance{}, |
| Clients: map[string]*types.Client{}, |
| WindowsInstances: map[string]*types.WindowsInstance{}, |
| LoginRequests: map[string]*types.LoginRequest{}, |
| Users: map[string]*types.User{}, |
| Playgrounds: map[string]*types.Playground{p.Id: p}, |
| WindowsInstancesBySessionId: map[string][]string{}, |
| InstancesBySessionId: map[string][]string{}, |
| ClientsBySessionId: map[string][]string{}, |
| UsersByProvider: map[string]string{}, |
| } |
| var loadedDB *DB |
|
|
| file, err := os.Open(tmpfile.Name()) |
|
|
| assert.Nil(t, err) |
| defer file.Close() |
|
|
| decoder := json.NewDecoder(file) |
| err = decoder.Decode(&loadedDB) |
|
|
| assert.Nil(t, err) |
|
|
| assert.EqualValues(t, expectedDB, loadedDB) |
| } |
|
|
| func TestPlaygroundGetAll(t *testing.T) { |
| p1 := &types.Playground{Id: "aaabbbccc"} |
| p2 := &types.Playground{Id: "dddeeefff"} |
| expectedDB := &DB{ |
| Sessions: map[string]*types.Session{}, |
| Instances: map[string]*types.Instance{}, |
| Clients: map[string]*types.Client{}, |
| WindowsInstances: map[string]*types.WindowsInstance{}, |
| LoginRequests: map[string]*types.LoginRequest{}, |
| Users: map[string]*types.User{}, |
| Playgrounds: map[string]*types.Playground{p1.Id: p1, p2.Id: p2}, |
| WindowsInstancesBySessionId: map[string][]string{}, |
| InstancesBySessionId: map[string][]string{}, |
| ClientsBySessionId: map[string][]string{}, |
| UsersByProvider: map[string]string{}, |
| } |
|
|
| tmpfile, err := ioutil.TempFile("", "pwd") |
| if err != nil { |
| log.Fatal(err) |
| } |
| encoder := json.NewEncoder(tmpfile) |
| err = encoder.Encode(&expectedDB) |
| assert.Nil(t, err) |
| tmpfile.Close() |
| defer os.Remove(tmpfile.Name()) |
|
|
| storage, err := NewFileStorage(tmpfile.Name()) |
|
|
| assert.Nil(t, err) |
|
|
| found, err := storage.PlaygroundGetAll() |
| assert.Nil(t, err) |
| assert.Subset(t, []*types.Playground{p1, p2}, found) |
| assert.Len(t, found, 2) |
| } |
|
|