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  }