github.com/guilhermebr/docker@v1.4.2-0.20150428121140-67da055cebca/pkg/requestdecorator/requestdecorator_test.go (about) 1 package requestdecorator 2 3 import ( 4 "net/http" 5 "strings" 6 "testing" 7 ) 8 9 func TestUAVersionInfo(t *testing.T) { 10 uavi := NewUAVersionInfo("foo", "bar") 11 if !uavi.isValid() { 12 t.Fatalf("UAVersionInfo should be valid") 13 } 14 uavi = NewUAVersionInfo("", "bar") 15 if uavi.isValid() { 16 t.Fatalf("Expected UAVersionInfo to be invalid") 17 } 18 uavi = NewUAVersionInfo("foo", "") 19 if uavi.isValid() { 20 t.Fatalf("Expected UAVersionInfo to be invalid") 21 } 22 } 23 24 func TestUserAgentDecorator(t *testing.T) { 25 httpVersion := make([]UAVersionInfo, 2) 26 httpVersion = append(httpVersion, NewUAVersionInfo("testname", "testversion")) 27 httpVersion = append(httpVersion, NewUAVersionInfo("name", "version")) 28 uad := &UserAgentDecorator{ 29 Versions: httpVersion, 30 } 31 32 req, err := http.NewRequest("GET", "/something", strings.NewReader("test")) 33 if err != nil { 34 t.Fatal(err) 35 } 36 reqDecorated, err := uad.ChangeRequest(req) 37 if err != nil { 38 t.Fatal(err) 39 } 40 41 if reqDecorated.Header.Get("User-Agent") != "testname/testversion name/version" { 42 t.Fatalf("Request should have User-Agent 'testname/testversion name/version'") 43 } 44 } 45 46 func TestUserAgentDecoratorErr(t *testing.T) { 47 httpVersion := make([]UAVersionInfo, 0) 48 uad := &UserAgentDecorator{ 49 Versions: httpVersion, 50 } 51 52 var req *http.Request 53 _, err := uad.ChangeRequest(req) 54 if err == nil { 55 t.Fatalf("Expected to get ErrNilRequest instead no error was returned") 56 } 57 } 58 59 func TestMetaHeadersDecorator(t *testing.T) { 60 var headers = map[string][]string{ 61 "key1": {"value1"}, 62 "key2": {"value2"}, 63 } 64 mhd := &MetaHeadersDecorator{ 65 Headers: headers, 66 } 67 68 req, err := http.NewRequest("GET", "/something", strings.NewReader("test")) 69 if err != nil { 70 t.Fatal(err) 71 } 72 reqDecorated, err := mhd.ChangeRequest(req) 73 if err != nil { 74 t.Fatal(err) 75 } 76 77 v, ok := reqDecorated.Header["key1"] 78 if !ok { 79 t.Fatalf("Expected to have header key1") 80 } 81 if v[0] != "value1" { 82 t.Fatalf("Expected value for key1 isn't value1") 83 } 84 85 v, ok = reqDecorated.Header["key2"] 86 if !ok { 87 t.Fatalf("Expected to have header key2") 88 } 89 if v[0] != "value2" { 90 t.Fatalf("Expected value for key2 isn't value2") 91 } 92 } 93 94 func TestMetaHeadersDecoratorErr(t *testing.T) { 95 mhd := &MetaHeadersDecorator{} 96 97 var req *http.Request 98 _, err := mhd.ChangeRequest(req) 99 if err == nil { 100 t.Fatalf("Expected to get ErrNilRequest instead no error was returned") 101 } 102 } 103 104 func TestAuthDecorator(t *testing.T) { 105 ad := NewAuthDecorator("test", "password") 106 107 req, err := http.NewRequest("GET", "/something", strings.NewReader("test")) 108 if err != nil { 109 t.Fatal(err) 110 } 111 reqDecorated, err := ad.ChangeRequest(req) 112 if err != nil { 113 t.Fatal(err) 114 } 115 116 username, password, ok := reqDecorated.BasicAuth() 117 if !ok { 118 t.Fatalf("Cannot retrieve basic auth info from request") 119 } 120 if username != "test" { 121 t.Fatalf("Expected username to be test, got %s", username) 122 } 123 if password != "password" { 124 t.Fatalf("Expected password to be password, got %s", password) 125 } 126 } 127 128 func TestAuthDecoratorErr(t *testing.T) { 129 ad := &AuthDecorator{} 130 131 var req *http.Request 132 _, err := ad.ChangeRequest(req) 133 if err == nil { 134 t.Fatalf("Expected to get ErrNilRequest instead no error was returned") 135 } 136 } 137 138 func TestRequestFactory(t *testing.T) { 139 ad := NewAuthDecorator("test", "password") 140 httpVersion := make([]UAVersionInfo, 2) 141 httpVersion = append(httpVersion, NewUAVersionInfo("testname", "testversion")) 142 httpVersion = append(httpVersion, NewUAVersionInfo("name", "version")) 143 uad := &UserAgentDecorator{ 144 Versions: httpVersion, 145 } 146 147 requestFactory := NewRequestFactory(ad, uad) 148 149 if l := len(requestFactory.GetDecorators()); l != 2 { 150 t.Fatalf("Expected to have two decorators, got %d", l) 151 } 152 153 req, err := requestFactory.NewRequest("GET", "/test", strings.NewReader("test")) 154 if err != nil { 155 t.Fatal(err) 156 } 157 158 username, password, ok := req.BasicAuth() 159 if !ok { 160 t.Fatalf("Cannot retrieve basic auth info from request") 161 } 162 if username != "test" { 163 t.Fatalf("Expected username to be test, got %s", username) 164 } 165 if password != "password" { 166 t.Fatalf("Expected password to be password, got %s", password) 167 } 168 if req.Header.Get("User-Agent") != "testname/testversion name/version" { 169 t.Fatalf("Request should have User-Agent 'testname/testversion name/version'") 170 } 171 } 172 173 func TestRequestFactoryNewRequestWithDecorators(t *testing.T) { 174 ad := NewAuthDecorator("test", "password") 175 176 requestFactory := NewRequestFactory(ad) 177 178 if l := len(requestFactory.GetDecorators()); l != 1 { 179 t.Fatalf("Expected to have one decorators, got %d", l) 180 } 181 182 ad2 := NewAuthDecorator("test2", "password2") 183 184 req, err := requestFactory.NewRequest("GET", "/test", strings.NewReader("test"), ad2) 185 if err != nil { 186 t.Fatal(err) 187 } 188 189 username, password, ok := req.BasicAuth() 190 if !ok { 191 t.Fatalf("Cannot retrieve basic auth info from request") 192 } 193 if username != "test2" { 194 t.Fatalf("Expected username to be test, got %s", username) 195 } 196 if password != "password2" { 197 t.Fatalf("Expected password to be password, got %s", password) 198 } 199 } 200 201 func TestRequestFactoryAddDecorator(t *testing.T) { 202 requestFactory := NewRequestFactory() 203 204 if l := len(requestFactory.GetDecorators()); l != 0 { 205 t.Fatalf("Expected to have zero decorators, got %d", l) 206 } 207 208 ad := NewAuthDecorator("test", "password") 209 requestFactory.AddDecorator(ad) 210 211 if l := len(requestFactory.GetDecorators()); l != 1 { 212 t.Fatalf("Expected to have one decorators, got %d", l) 213 } 214 } 215 216 func TestRequestFactoryNil(t *testing.T) { 217 var requestFactory RequestFactory 218 _, err := requestFactory.NewRequest("GET", "/test", strings.NewReader("test")) 219 if err != nil { 220 t.Fatalf("Expected not to get and error, got %s", err) 221 } 222 }