github.com/xmidt-org/webpa-common@v1.11.9/xhttp/fanout/configuration_test.go (about)

     1  package fanout
     2  
     3  import (
     4  	"net/http"
     5  	"net/http/httptest"
     6  	"testing"
     7  	"time"
     8  
     9  	"github.com/stretchr/testify/assert"
    10  )
    11  
    12  func testConfigurationDefault(t *testing.T, cfg *Configuration) {
    13  	assert := assert.New(t)
    14  	assert.Empty(cfg.endpoints())
    15  	assert.Equal("", cfg.authorization())
    16  	assert.Equal(DefaultFanoutTimeout, cfg.fanoutTimeout())
    17  	assert.Equal(DefaultClientTimeout, cfg.clientTimeout())
    18  	assert.NotNil(cfg.transport())
    19  	assert.Equal(DefaultConcurrency, cfg.concurrency())
    20  	assert.Empty(cfg.redirectExcludeHeaders())
    21  	assert.Zero(cfg.maxRedirects())
    22  	assert.NotNil(cfg.checkRedirect())
    23  }
    24  
    25  func testConfigurationCustom(t *testing.T) {
    26  	var (
    27  		assert = assert.New(t)
    28  
    29  		cfg = Configuration{
    30  			Endpoints:              []string{"localhost:1234"},
    31  			Authorization:          "deadbeef",
    32  			FanoutTimeout:          13 * time.Hour,
    33  			ClientTimeout:          981 * time.Millisecond,
    34  			Concurrency:            63482,
    35  			RedirectExcludeHeaders: []string{"X-Test-1", "X-Test-2"},
    36  			MaxRedirects:           17,
    37  		}
    38  	)
    39  
    40  	assert.Equal([]string{"localhost:1234"}, cfg.endpoints())
    41  	assert.Equal("deadbeef", cfg.authorization())
    42  	assert.Equal(13*time.Hour, cfg.fanoutTimeout())
    43  	assert.Equal(981*time.Millisecond, cfg.clientTimeout())
    44  	assert.NotNil(cfg.transport())
    45  	assert.Equal(63482, cfg.concurrency())
    46  	assert.Equal([]string{"X-Test-1", "X-Test-2"}, cfg.redirectExcludeHeaders())
    47  	assert.Equal(17, cfg.maxRedirects())
    48  	assert.NotNil(cfg.checkRedirect())
    49  }
    50  
    51  func TestConfiguration(t *testing.T) {
    52  	t.Run("Nil", func(t *testing.T) {
    53  		testConfigurationDefault(t, nil)
    54  	})
    55  
    56  	t.Run("Default", func(t *testing.T) {
    57  		testConfigurationDefault(t, new(Configuration))
    58  	})
    59  
    60  	t.Run("Custom", testConfigurationCustom)
    61  }
    62  
    63  func TestNewTransactor(t *testing.T) {
    64  	assert := assert.New(t)
    65  	assert.NotNil(NewTransactor(Configuration{}))
    66  }
    67  
    68  func TestNewChain(t *testing.T) {
    69  	var (
    70  		assert = assert.New(t)
    71  
    72  		handlerCalled = false
    73  		handler       = http.HandlerFunc(func(_ http.ResponseWriter, request *http.Request) {
    74  			handlerCalled = true
    75  			deadline, ok := request.Context().Deadline()
    76  			assert.False(deadline.IsZero())
    77  			assert.True(ok)
    78  		})
    79  
    80  		chain = NewChain(Configuration{})
    81  	)
    82  
    83  	decorated := chain.Then(handler)
    84  	decorated.ServeHTTP(httptest.NewRecorder(), httptest.NewRequest("GET", "/", nil))
    85  	assert.True(handlerCalled)
    86  }