github.com/unirita/cuto@v0.9.8-0.20160830082821-aa6652f877b7/servant/remote/session_test.go (about) 1 // Copyright 2015 unirita Inc. 2 // Created 2015/04/10 honda 3 4 package remote 5 6 import ( 7 "errors" 8 "strings" 9 "testing" 10 11 "github.com/unirita/cuto/db" 12 "github.com/unirita/cuto/message" 13 "github.com/unirita/cuto/servant/config" 14 "github.com/unirita/cuto/testutil" 15 ) 16 17 func readTestConfig() *config.ServantConfig { 18 config.Servant = config.DefaultServantConfig() 19 return config.Servant 20 } 21 22 func doTestRequest(req *message.Request, conf *config.ServantConfig, stCh chan<- string) *message.Response { 23 res := new(message.Response) 24 res.NID = req.NID 25 res.RC = 1 26 res.Detail = "detail" 27 res.JID = req.JID 28 res.Stat = db.NORMAL 29 res.St = "20150331131524.123456789" 30 res.Et = "20150331131525.123456789" 31 res.JoblogFile = "abc.log" 32 33 return res 34 } 35 36 func TestDo_ジョブを実行し結果を送信できる(t *testing.T) { 37 reqMsg := `{ 38 "type":"request", 39 "varsion":"1.2.3", 40 "nid":1234, 41 "jid":"001", 42 "path":"C:\\work\\test.bat", 43 "param":"test", 44 "env":"testenv=val", 45 "workspace": "C:\\work", 46 "warnrc":4, 47 "warnstr":"warn", 48 "errrc":12, 49 "errstr":"error" 50 }` 51 52 conf := readTestConfig() 53 message.ServantVersion = "2.3.4" 54 55 conn := testutil.NewConnStub() 56 session := Session{Conn: conn, Body: reqMsg, doJobRequest: doTestRequest} 57 session.startHeartbeat() 58 err := session.Do(conf) 59 if err != nil { 60 t.Fatalf("想定外のエラーが発生した: %s", err) 61 } 62 63 expected := `{"type":"response","version":"2.3.4","nid":1234,"jid":"001","rc":1,"stat":1,"detail":"detail","var":"","st":"20150331131524.123456789","et":"20150331131525.123456789","joblogfile":"abc.log"}` 64 expected += "\n" 65 if conn.WriteStr != expected { 66 t.Errorf("送信されたジョブ実行結果が間違っています。") 67 t.Logf("想定値: %s", expected) 68 t.Logf("実績値: %s", conn.WriteStr) 69 } 70 } 71 72 func TestDo_パースできないリクエストメッセージが来たらエラー(t *testing.T) { 73 reqMsg := `notjson` 74 75 conf := readTestConfig() 76 77 conn := testutil.NewConnStub() 78 session := Session{Conn: conn, Body: reqMsg, doJobRequest: doTestRequest} 79 session.startHeartbeat() 80 err := session.Do(conf) 81 if err == nil { 82 t.Error("エラーが発生していない。") 83 } 84 85 if conn.WriteStr != "" { 86 t.Errorf("想定外のメッセージが書き込まれた: %s", conn.WriteStr) 87 } 88 } 89 90 func TestDo_使用不可能な変数が使用されたら異常終了のレスポンスを返す(t *testing.T) { 91 reqMsg := `{ 92 "type":"request", 93 "varsion":"1.2.3", 94 "nid":1234, 95 "jid":"001", 96 "path":"C:\\work\\test.bat", 97 "param":"$SSJOBNET:ID$", 98 "env":"testenv=val", 99 "workspace": "C:\\work", 100 "warnrc":4, 101 "warnstr":"warn", 102 "errrc":12, 103 "errstr":"error" 104 }` 105 106 conf := readTestConfig() 107 108 conn := testutil.NewConnStub() 109 session := Session{Conn: conn, Body: reqMsg, doJobRequest: doTestRequest} 110 session.startHeartbeat() 111 err := session.Do(conf) 112 if err != nil { 113 t.Fatalf("想定外のエラーが発生した: %s", err) 114 } 115 116 if !strings.Contains(conn.WriteStr, `"stat":9`) || !strings.Contains(conn.WriteStr, "Undefined variable") { 117 t.Errorf("想定外のメッセージが書き込まれた: %s", conn.WriteStr) 118 } 119 } 120 121 func TestDo_コネクションオブジェクトへのWriteに失敗したらエラー(t *testing.T) { 122 reqMsg := `{ 123 "type":"request", 124 "varsion":"1.2.3", 125 "nid":1234, 126 "jid":"001", 127 "path":"C:\\work\\test.bat", 128 "param":"test", 129 "env":"testenv=val", 130 "workspace": "C:\\work", 131 "warnrc":4, 132 "warnstr":"warn", 133 "errrc":12, 134 "errstr":"error" 135 }` 136 137 conf := readTestConfig() 138 139 conn := testutil.NewConnStub() 140 conn.WriteErr = errors.New("testerror") 141 session := Session{Conn: conn, Body: reqMsg, doJobRequest: doTestRequest} 142 session.startHeartbeat() 143 err := session.Do(conf) 144 if err == nil { 145 t.Error("エラーが発生していない。") 146 } 147 148 if conn.WriteStr != "" { 149 t.Errorf("想定外のメッセージが書き込まれた: %s", conn.WriteStr) 150 } 151 }