47 lines
990 B
Go
47 lines
990 B
Go
package reloader
|
|
|
|
import (
|
|
"net/http"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestAtomicHandler(t *testing.T) {
|
|
// for ptr identity
|
|
type testHandler struct{ http.Handler }
|
|
|
|
hrFn := func() http.Handler {
|
|
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})
|
|
}
|
|
|
|
hrFunc1 := &testHandler{hrFn()}
|
|
hrFunc2 := &testHandler{hrFn()}
|
|
assert.NotEqual(t, hrFunc1, hrFunc2)
|
|
|
|
// a new AtomicHandler should be non-nil
|
|
hr := NewAtomicHandler(nil)
|
|
assert.NotNil(t, hr)
|
|
|
|
// should have no stored handler
|
|
{
|
|
hrCur := hr.load()
|
|
assert.Nil(t, hrCur)
|
|
assert.Equal(t, true, hrCur == nil)
|
|
}
|
|
|
|
// should be non-nil after store
|
|
for i := 0; i < 3; i++ {
|
|
hr.Store(hrFunc1)
|
|
assert.NotNil(t, hr.load())
|
|
assert.Equal(t, hr.load(), hrFunc1)
|
|
assert.Equal(t, hr.load() == hrFunc1, true)
|
|
|
|
// should update to hrFunc2
|
|
hr.Store(hrFunc2)
|
|
assert.NotNil(t, hr.load())
|
|
assert.Equal(t, hr.load(), hrFunc2)
|
|
assert.Equal(t, hr.load() == hrFunc2, true)
|
|
}
|
|
}
|