draft test
This commit is contained in:
100
models/peer/tests/peer_cache_test.go
Normal file
100
models/peer/tests/peer_cache_test.go
Normal file
@@ -0,0 +1,100 @@
|
||||
package peer_test
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"testing"
|
||||
|
||||
"cloud.o-forge.io/core/oc-lib/models/peer"
|
||||
"cloud.o-forge.io/core/oc-lib/tools"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/mock"
|
||||
)
|
||||
|
||||
// MockHTTPCaller mocks tools.HTTPCaller
|
||||
type MockHTTPCaller struct {
|
||||
mock.Mock
|
||||
URLS map[tools.DataType]map[tools.METHOD]string
|
||||
}
|
||||
|
||||
func (c *MockHTTPCaller) GetUrls() map[tools.DataType]map[tools.METHOD]string {
|
||||
return c.URLS
|
||||
}
|
||||
|
||||
func (m *MockHTTPCaller) CallPost(url, token string, body interface{}, types ...string) ([]byte, error) {
|
||||
args := m.Called(url, token, body)
|
||||
return args.Get(0).([]byte), args.Error(1)
|
||||
}
|
||||
|
||||
func (m *MockHTTPCaller) CallGet(url, token string, types ...string) ([]byte, error) {
|
||||
args := m.Called(url, token)
|
||||
return args.Get(0).([]byte), args.Error(1)
|
||||
}
|
||||
|
||||
func (m *MockHTTPCaller) CallDelete(url, token string) ([]byte, error) {
|
||||
args := m.Called(url, token)
|
||||
return args.Get(0).([]byte), args.Error(1)
|
||||
}
|
||||
|
||||
func TestLaunchPeerExecution_PeerNotReachable(t *testing.T) {
|
||||
cache := &peer.PeerCache{}
|
||||
caller := &MockHTTPCaller{
|
||||
URLS: map[tools.DataType]map[tools.METHOD]string{
|
||||
tools.PEER: {
|
||||
tools.POST: "/execute/:id",
|
||||
},
|
||||
},
|
||||
}
|
||||
exec, err := cache.LaunchPeerExecution("peer-id", "data-id", tools.PEER, tools.POST, map[string]string{"a": "b"}, caller)
|
||||
assert.Nil(t, exec)
|
||||
assert.Error(t, err)
|
||||
assert.Contains(t, err.Error(), "not reachable")
|
||||
}
|
||||
|
||||
func TestExecSuccess(t *testing.T) {
|
||||
cache := &peer.PeerCache{}
|
||||
caller := &MockHTTPCaller{}
|
||||
url := "http://mockpeer/resource"
|
||||
response := map[string]interface{}{"result": "ok"}
|
||||
data, _ := json.Marshal(response)
|
||||
|
||||
caller.On("CallPost", url, "", mock.Anything).Return(data, nil)
|
||||
err := cache.Exec(url, tools.POST, map[string]string{"key": "value"}, caller)
|
||||
assert.NoError(t, err)
|
||||
caller.AssertExpectations(t)
|
||||
}
|
||||
|
||||
func TestExecReturnsErrorField(t *testing.T) {
|
||||
cache := &peer.PeerCache{}
|
||||
caller := &MockHTTPCaller{}
|
||||
url := "http://mockpeer/resource"
|
||||
response := map[string]interface{}{"error": "something failed"}
|
||||
data, _ := json.Marshal(response)
|
||||
|
||||
caller.On("CallPost", url, "", mock.Anything).Return(data, nil)
|
||||
err := cache.Exec(url, tools.POST, map[string]string{"key": "value"}, caller)
|
||||
assert.Error(t, err)
|
||||
assert.Equal(t, "something failed", err.Error())
|
||||
}
|
||||
|
||||
func TestExecInvalidJSON(t *testing.T) {
|
||||
cache := &peer.PeerCache{}
|
||||
caller := &MockHTTPCaller{}
|
||||
url := "http://mockpeer/resource"
|
||||
caller.On("CallPost", url, "", mock.Anything).Return([]byte("{invalid json}"), nil)
|
||||
err := cache.Exec(url, tools.POST, map[string]string{"key": "value"}, caller)
|
||||
assert.Error(t, err)
|
||||
assert.Contains(t, err.Error(), "invalid character")
|
||||
}
|
||||
|
||||
type mockAccessor struct {
|
||||
loadOne func(string) (interface{}, int, error)
|
||||
updateOne func(interface{}, string) error
|
||||
}
|
||||
|
||||
func (m *mockAccessor) LoadOne(id string) (interface{}, int, error) {
|
||||
return m.loadOne(id)
|
||||
}
|
||||
|
||||
func (m *mockAccessor) UpdateOne(i interface{}, id string) error {
|
||||
return m.updateOne(i, id)
|
||||
}
|
||||
Reference in New Issue
Block a user