-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathstorage_test.go
108 lines (104 loc) · 3.63 KB
/
storage_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
package main
import (
"bytes"
"io/ioutil"
"os"
"testing"
)
var realStoragePath string = storagePath
var realFileNames FileNames = fileNames
func SetTestStoragePath() {
storagePath = "test_data/"
}
func SetTestCredentialsName(newName string) {
fileNames.credentials = newName
}
func SetTestServersName(newName string) {
fileNames.servers = newName
}
func RevertTestStorageData() {
storagePath = realStoragePath
fileNames = realFileNames
}
func BackupStorageFile(fileName string) bool{
if _, err := os.Stat(storagePath + fileNames.credentials); os.IsNotExist(err) {
return false // file did not exist
}
os.Rename(storagePath+fileName, storagePath+fileName+"_testbackup")
return true
}
func RestoreStorageFile(fileName string) {
os.Remove(storagePath+fileName)
os.Rename(storagePath+fileName+"_testbackup", storagePath+fileName)
}
func TestSaveLoginData(t *testing.T) {
SetTestStoragePath()
SetTestCredentialsName("cred_saveLoginData")
username, password := "test", "something"
SaveLoginData(username, password)
dat, err := ioutil.ReadFile(storagePath + fileNames.credentials)
if err != nil {
t.Errorf("Save login data failed. Expected: file %v%v to be created. Got: %v", storagePath, fileNames, err)
}
RevertTestStorageData()
expectedData := []byte(username+"\n"+password)
if !bytes.Equal(dat,expectedData) {
t.Errorf("Save login data failed. Expected file contents: %s. Got: %s", expectedData, dat)
}
}
func TestSaveServersData(t *testing.T) {
SetTestStoragePath()
SetTestServersName("servers_saveServersData")
expectedList := []byte("[{\"name\":\"United States #93\",\"distance\":1634},{\"name\":\"Germany #81\",\"distance\":26},{\"name\":\"Latvia #7\",\"distance\":1581}]")
SaveServerData(expectedList)
dat, err := ioutil.ReadFile(storagePath + fileNames.servers)
if err != nil {
t.Errorf("Save server data failed. Expected: file %v%v to be created. Got: %v", storagePath, fileNames, err)
}
RevertTestStorageData()
if !bytes.Equal(dat,expectedList) {
t.Errorf("Save login data failed. Expected file contents: %s. Got: %s", expectedList, dat)
}
}
func TestLoadLoginDataValid(t *testing.T) {
SetTestStoragePath()
SetTestCredentialsName("cred_valid")
uname, pass, err := LoadLoginData()
expected_uname := "validusername1"
expected_pass := "validPassword!"
RevertTestStorageData()
if err != nil || uname != expected_uname || pass != expected_pass {
t.Errorf("Test Load login data failed. Expected: %s, %s; error: %v. Got: %s, %s; error: %v",
expected_uname, expected_pass, nil, uname, pass, err)
}
}
func TestLoadLoginDataInvalid(t *testing.T) {
SetTestStoragePath()
SetTestCredentialsName("cred_invalid")
_, _, err := LoadLoginData()
RevertTestStorageData()
if err, ok := err.(CliError); !(ok && err.errorType == ErrParse) {
t.Errorf("Test Load login data failed. Expected: ErrParse. Got: %v", err)
}
}
func TestLoadServerDataValid(t *testing.T) {
SetTestStoragePath()
SetTestServersName("servers_valid")
data, err := LoadServerData()
expectedData := []byte("[{\"name\":\"United States #93\",\"distance\":1634},{\"name\":\"Germany #81\",\"distance\":26},{\"name\":\"Latvia #7\",\"distance\":1581}]\n")
RevertTestStorageData()
if err != nil || !bytes.Equal(expectedData,data) {
t.Errorf("Test Load server data failed. Expected: %s; error: %v. Got: %s; error: %v",
expectedData, nil, data, err)
}
}
func TestLoadServerDataInvalid(t *testing.T) {
SetTestStoragePath()
SetTestServersName("servers_invalid")
data, err := LoadServerData()
RevertTestStorageData()
_, err = ParseServerData(data)
if err, ok := err.(CliError); !(ok && err.errorType == ErrParse) {
t.Errorf("Test Load login data failed. Expected: ErrParse. Got: %v", err)
}
}