mirror of
https://github.com/balzack/databag.git
synced 2025-02-12 03:29:16 +00:00
added testing utility
This commit is contained in:
parent
6ee801747c
commit
4298bd5b31
@ -13,6 +13,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
const TEST_READDEADLINE = 2
|
const TEST_READDEADLINE = 2
|
||||||
|
const TEST_REVISIONWAIT = 250
|
||||||
|
|
||||||
type TestCard struct {
|
type TestCard struct {
|
||||||
Guid string
|
Guid string
|
||||||
@ -24,6 +25,7 @@ type TestCard struct {
|
|||||||
type TestContact struct {
|
type TestContact struct {
|
||||||
Guid string
|
Guid string
|
||||||
Token string
|
Token string
|
||||||
|
Revisions chan *Revision
|
||||||
A TestCard
|
A TestCard
|
||||||
B TestCard
|
B TestCard
|
||||||
C TestCard
|
C TestCard
|
||||||
@ -37,6 +39,53 @@ type TestGroup struct {
|
|||||||
D TestContact
|
D TestContact
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func GetTestRevision(status chan *Revision) (rev *Revision) {
|
||||||
|
time.Sleep(TEST_REVISIONWAIT * time.Millisecond)
|
||||||
|
for {
|
||||||
|
select {
|
||||||
|
case r:=<-status:
|
||||||
|
rev = r
|
||||||
|
default:
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func SendEndpointTest(
|
||||||
|
endpoint func(http.ResponseWriter, *http.Request),
|
||||||
|
params *map[string]string,
|
||||||
|
body interface{},
|
||||||
|
token string,
|
||||||
|
response interface{},
|
||||||
|
) (err error) {
|
||||||
|
|
||||||
|
var r *http.Request
|
||||||
|
var w *httptest.ResponseRecorder
|
||||||
|
|
||||||
|
if r, w, err = NewRequest("REST", "/NAME", body); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if params != nil {
|
||||||
|
r = mux.SetURLVars(r, *params)
|
||||||
|
}
|
||||||
|
if token != "" {
|
||||||
|
SetBearerAuth(r, token)
|
||||||
|
}
|
||||||
|
endpoint(w, r)
|
||||||
|
|
||||||
|
resp := w.Result()
|
||||||
|
if resp.StatusCode != 200 {
|
||||||
|
err = errors.New("response failed");
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if response == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
dec := json.NewDecoder(resp.Body)
|
||||||
|
dec.Decode(response)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// A --- connected,group connected,group --- B
|
// A --- connected,group connected,group --- B
|
||||||
// | \ /|
|
// | \ /|
|
||||||
@ -54,6 +103,8 @@ type TestGroup struct {
|
|||||||
//
|
//
|
||||||
func AddTestGroup(prefix string) (*TestGroup, error) {
|
func AddTestGroup(prefix string) (*TestGroup, error) {
|
||||||
var err error
|
var err error
|
||||||
|
var rev *Revision
|
||||||
|
var ws *websocket.Conn
|
||||||
|
|
||||||
// allocate contacts
|
// allocate contacts
|
||||||
g := &TestGroup{}
|
g := &TestGroup{}
|
||||||
@ -158,9 +209,63 @@ func AddTestGroup(prefix string) (*TestGroup, error) {
|
|||||||
return g, err
|
return g, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// connect websockets
|
||||||
|
rev = &Revision{}
|
||||||
|
if ws, err = StatusConnection(g.A.Token, rev); err != nil {
|
||||||
|
return g, err
|
||||||
|
}
|
||||||
|
g.A.Revisions = make(chan *Revision, 64)
|
||||||
|
g.A.Revisions <- rev
|
||||||
|
go MonitorStatus(ws, &g.A);
|
||||||
|
if ws, err = StatusConnection(g.B.Token, rev); err != nil {
|
||||||
|
return g, err
|
||||||
|
}
|
||||||
|
g.B.Revisions = make(chan *Revision, 64)
|
||||||
|
g.B.Revisions <- rev
|
||||||
|
go MonitorStatus(ws, &g.B);
|
||||||
|
if ws, err = StatusConnection(g.C.Token, rev); err != nil {
|
||||||
|
return g, err
|
||||||
|
}
|
||||||
|
g.C.Revisions = make(chan *Revision, 64)
|
||||||
|
g.C.Revisions <- rev
|
||||||
|
go MonitorStatus(ws, &g.C);
|
||||||
|
if ws, err = StatusConnection(g.D.Token, rev); err != nil {
|
||||||
|
return g, err
|
||||||
|
}
|
||||||
|
g.D.Revisions = make(chan *Revision, 64)
|
||||||
|
g.D.Revisions <- rev
|
||||||
|
go MonitorStatus(ws, &g.D);
|
||||||
|
|
||||||
return g, nil
|
return g, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func MonitorStatus(ws *websocket.Conn, contact *TestContact) {
|
||||||
|
var data []byte
|
||||||
|
var dataType int
|
||||||
|
var err error
|
||||||
|
|
||||||
|
// reset any timeout
|
||||||
|
ws.SetReadDeadline(time.Time{})
|
||||||
|
|
||||||
|
// read revision update
|
||||||
|
for ;; {
|
||||||
|
if dataType, data, err = ws.ReadMessage(); err != nil {
|
||||||
|
LogMsg("failed to read status conenction")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if dataType != websocket.TextMessage {
|
||||||
|
LogMsg("invalid status data type")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
rev := &Revision{}
|
||||||
|
if err = json.Unmarshal(data, rev); err != nil {
|
||||||
|
LogMsg("invalid status data")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
contact.Revisions <- rev
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func GetCardToken(account string, cardId string) (token string, err error) {
|
func GetCardToken(account string, cardId string) (token string, err error) {
|
||||||
var r *http.Request
|
var r *http.Request
|
||||||
var w *httptest.ResponseRecorder
|
var w *httptest.ResponseRecorder
|
||||||
|
@ -8,8 +8,25 @@ import (
|
|||||||
func TestAddArticle(t *testing.T) {
|
func TestAddArticle(t *testing.T) {
|
||||||
var set *TestGroup
|
var set *TestGroup
|
||||||
var err error
|
var err error
|
||||||
|
var rev *Revision
|
||||||
|
|
||||||
set, err = AddTestGroup("addaccount1")
|
// setup testing group
|
||||||
|
set, err = AddTestGroup("addarticle1")
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
PrintMsg(set)
|
rev = GetTestRevision(set.A.Revisions)
|
||||||
|
assert.NotNil(t, rev)
|
||||||
|
|
||||||
|
|
||||||
|
// EXAMPLE
|
||||||
|
subject := &Subject{
|
||||||
|
}
|
||||||
|
var group Group
|
||||||
|
assert.NoError(t, SendEndpointTest(AddGroup, nil, subject, set.A.Token, &group))
|
||||||
|
PrintMsg(group)
|
||||||
|
|
||||||
|
// create article
|
||||||
|
|
||||||
|
// check content revision
|
||||||
|
|
||||||
|
// check contact revisions
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user