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  }