@@ -19,6 +19,8 @@ package tools
1919import (
2020 "errors"
2121 "fmt"
22+ "net/http"
23+ "net/http/httptest"
2224 "reflect"
2325 "sync"
2426 "testing"
@@ -29,6 +31,7 @@ import (
2931 "github.com/GoogleCloudPlatform/kubernetes/pkg/conversion"
3032 "github.com/GoogleCloudPlatform/kubernetes/pkg/runtime"
3133 "github.com/coreos/go-etcd/etcd"
34+ "github.com/stretchr/testify/assert"
3235)
3336
3437type TestResource struct {
@@ -643,3 +646,48 @@ func TestAtomicUpdate_CreateCollision(t *testing.T) {
643646 t .Errorf ("Some of the writes were lost. Stored value: %d" , stored .Value )
644647 }
645648}
649+
650+ func TestGetEtcdVersion_ValidVersion (t * testing.T ) {
651+ testServer := httptest .NewServer (http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
652+ fmt .Fprintln (w , "{\" releaseVersion\" :\" 2.0.3\" ,\" internalVersion\" :\" 2\" }" )
653+ }))
654+ defer testServer .Close ()
655+
656+ var relVersion string
657+ var intVersion string
658+ var err error
659+ if relVersion , intVersion , err = GetEtcdVersion (testServer .URL ); err != nil {
660+ t .Errorf ("Unexpected error: %v" , err )
661+ }
662+ assert .Equal (t , "2.0.3" , relVersion , "Unexpected external version" )
663+ assert .Equal (t , "2" , intVersion , "Unexpected internal version" )
664+ assert .Nil (t , err )
665+ }
666+
667+ func TestGetEtcdVersion_UnknownVersion (t * testing.T ) {
668+ testServer := httptest .NewServer (http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
669+ fmt .Fprintln (w , "{\" unknownAttribute\" :\" foobar\" ,\" internalVersion\" :\" 2\" }" )
670+ }))
671+ defer testServer .Close ()
672+
673+ var relVersion string
674+ var intVersion string
675+ var err error
676+ if relVersion , intVersion , err = GetEtcdVersion (testServer .URL ); err != nil {
677+ t .Errorf ("Unexpected error: %v" , err )
678+ }
679+ assert .Equal (t , "" , relVersion , "Unexpected external version" )
680+ assert .Equal (t , "2" , intVersion , "Unexpected internal version" )
681+ assert .Nil (t , err )
682+ }
683+
684+ func TestGetEtcdVersion_ErrorStatus (t * testing.T ) {
685+ testServer := httptest .NewServer (http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
686+ w .WriteHeader (http .StatusServiceUnavailable )
687+ }))
688+ defer testServer .Close ()
689+
690+ var err error
691+ _ , _ , err = GetEtcdVersion (testServer .URL )
692+ assert .NotNil (t , err )
693+ }
0 commit comments