@@ -25,115 +25,66 @@ import (
2525 "github.com/stretchr/testify/require"
2626)
2727
28- func TestGetValidUrl (t * testing.T ) {
28+ func TestDaemonVersion (t * testing.T ) {
2929 testCases := []struct {
30- name string
31- hostPort string
32- expectedResult string
30+ name string
31+ serverStub Tripper
32+ port string
33+ expectedResult string
34+ expectedErrorMessage string
3335 }{
3436 {
35- name : "Valid host and port should return default." ,
36- hostPort : "localhost:8800" ,
37- expectedResult : "localhost:8800" ,
37+ name : "return the server version when the server is up" ,
38+ serverStub : successServer ,
39+ port : "8800" ,
40+ expectedResult : "3.0-server" ,
41+ expectedErrorMessage : "" ,
3842 },
3943 {
40- name : "Missing host should return default host." ,
41- hostPort : ":8800" ,
42- expectedResult : "localhost:8800" ,
44+ name : "return error if default server is not listening on default port" ,
45+ serverStub : failureServer ,
46+ port : "8800" ,
47+ expectedResult : "" ,
48+ expectedErrorMessage : `Get "http://localhost:8800/v1/version": connection refused` ,
4349 },
4450 {
45- name : "Missing port should return default port." ,
46- hostPort : "localhost:" ,
47- expectedResult : "localhost:8800" ,
51+ name : "return error if provided server is not listening on provided port" ,
52+ serverStub : failureServer ,
53+ port : "1234" ,
54+ expectedResult : "" ,
55+ expectedErrorMessage : `Get "http://localhost:1234/v1/version": connection refused` ,
4856 },
4957 {
50- name : "Custom host and port should return the provided host:port." ,
51- hostPort : "192.168.100.1:1234" ,
52- expectedResult : "192.168.100.1:1234" ,
58+ name : "return error for server response 500 Internal Server Error" ,
59+ serverStub : failureInternalServerError ,
60+ port : "0" ,
61+ expectedResult : "" ,
62+ expectedErrorMessage : "unexpected status code received" ,
5363 },
54- {
55- name : "Host only should return provided input and default port." ,
56- hostPort : "192.168.1.1" ,
57- expectedResult : "192.168.1.1:8800" ,
58- },
59- {
60- name : "Missing host and port should return default." ,
61- hostPort : "" ,
62- expectedResult : "localhost:8800" ,
63- },
64- }
65-
66- for _ , tc := range testCases {
67- t .Run (tc .name , func (t * testing.T ) {
68- url , _ := validateHost (tc .hostPort )
69- require .Equal (t , tc .expectedResult , url )
70- })
71- }
72- }
7364
74- func TestServerVersion (t * testing.T ) {
75- clientVersion := "5.1-dev"
76- unreacheableUrl := "unreacheable:123"
77- daemonVersion := ""
78-
79- testCases := []struct {
80- name string
81- serverStub Tripper
82- expectedResult versionResult
83- hostAndPort string
84- }{
8565 {
86- name : "return the server version when the server is up" ,
87- serverStub : successServer ,
88- expectedResult : versionResult {
89- Name : ProgramName ,
90- Version : clientVersion ,
91- DaemonVersion : "3.0" ,
92- },
93- hostAndPort : "localhost:8800" ,
94- },
95- {
96- name : "return error if default server is not listening" ,
97- serverStub : failureServer ,
98- expectedResult : versionResult {
99- Name : ProgramName ,
100- Version : clientVersion ,
101- DaemonVersion : daemonVersion ,
102- },
103- hostAndPort : unreacheableUrl ,
104- },
105- {
106- name : "return error if provided server is not listening" ,
107- serverStub : failureServer ,
108- expectedResult : versionResult {
109- Name : ProgramName ,
110- Version : clientVersion ,
111- DaemonVersion : daemonVersion ,
112- },
113- hostAndPort : unreacheableUrl ,
114- },
115- {
116- name : "return error for server resopnse 500 Internal Server Error" ,
117- serverStub : failureInternalServerError ,
118- expectedResult : versionResult {
119- Name : ProgramName ,
120- Version : clientVersion ,
121- DaemonVersion : daemonVersion ,
122- },
123- hostAndPort : unreacheableUrl ,
66+ name : "return error for server up and wrong json response" ,
67+ serverStub : successServerWrongJson ,
68+ port : "8800" ,
69+ expectedResult : "" ,
70+ expectedErrorMessage : "invalid character '<' looking for beginning of value" ,
12471 },
12572 }
73+
12674 for _ , tc := range testCases {
12775 t .Run (tc .name , func (t * testing.T ) {
12876 // arrange
12977 httpClient := http.Client {}
13078 httpClient .Transport = tc .serverStub
13179
13280 // act
133- result , _ := versionHandler (httpClient , clientVersion , tc .hostAndPort )
81+ result , err := getDaemonVersion (httpClient , tc .port )
13482
13583 // assert
13684 require .Equal (t , tc .expectedResult , result )
85+ if err != nil {
86+ require .Equal (t , tc .expectedErrorMessage , err .Error ())
87+ }
13788 })
13889 }
13990}
@@ -147,15 +98,23 @@ func (t Tripper) RoundTrip(request *http.Request) (*http.Response, error) {
14798}
14899
149100var successServer = Tripper (func (* http.Request ) (* http.Response , error ) {
150- body := io .NopCloser (strings .NewReader (`{"version":"3.0"}` ))
101+ body := io .NopCloser (strings .NewReader (`{"version":"3.0-server"}` ))
102+ return & http.Response {
103+ StatusCode : http .StatusOK ,
104+ Body : body ,
105+ }, nil
106+ })
107+
108+ var successServerWrongJson = Tripper (func (* http.Request ) (* http.Response , error ) {
109+ body := io .NopCloser (strings .NewReader (`<!doctype html><html lang="en"` ))
151110 return & http.Response {
152111 StatusCode : http .StatusOK ,
153112 Body : body ,
154113 }, nil
155114})
156115
157116var failureServer = Tripper (func (* http.Request ) (* http.Response , error ) {
158- return nil , errors .New ("connetion refused" )
117+ return nil , errors .New ("connection refused" )
159118})
160119
161120var failureInternalServerError = Tripper (func (* http.Request ) (* http.Response , error ) {
0 commit comments