github.com/unirita/cuto@v0.9.8-0.20160830082821-aa6652f877b7/servant/remote/receive_test.go (about)

     1  package remote
     2  
     3  import (
     4  	"errors"
     5  	"testing"
     6  
     7  	"github.com/unirita/cuto/servant/config"
     8  	"github.com/unirita/cuto/testutil"
     9  )
    10  
    11  func init() {
    12  	config.ReadConfig("")
    13  }
    14  
    15  func TestStartReceive_ポート番号に定義外の値を渡すとエラーが発生する(t *testing.T) {
    16  	_, err := StartReceive(config.Servant.Sys.BindAddress, 65536, config.Servant.Job.MultiProc)
    17  
    18  	if err == nil {
    19  		t.Error("エラーが発生していない。")
    20  	}
    21  }
    22  
    23  func TestReceiveLoopProcess_セッションキューにセッションを追加できる(t *testing.T) {
    24  	listener := testutil.NewListenerStub()
    25  	sq := make(chan *Session, 1)
    26  	err := receiveLoopProcess(listener, sq)
    27  	defer close(sq)
    28  
    29  	if err != nil {
    30  		t.Fatalf("想定外のエラーが発生した: %s", err)
    31  	}
    32  
    33  	session := <-sq
    34  	if session == nil {
    35  		t.Error("セッションがキューに挿入されていない。")
    36  	}
    37  }
    38  
    39  func TestReceiveLoopProcess_Acceptに失敗したらエラー(t *testing.T) {
    40  	listener := testutil.NewListenerStub()
    41  	listener.AcceptErr = errors.New("testerror")
    42  	sq := make(chan *Session, 1)
    43  	err := receiveLoopProcess(listener, sq)
    44  	close(sq)
    45  
    46  	if err == nil {
    47  		t.Error("エラーが発生していない。")
    48  	}
    49  }
    50  
    51  func TestReceiveMessage_セッションキューにセッションを追加できる(t *testing.T) {
    52  	reqMsg := `{"type":"request","id":1234,"path":"C:\\work\\test.bat","param":"test","workspace": "C:\\work"}`
    53  	conn := testutil.NewConnStub()
    54  	conn.ReadStr = reqMsg + "\n"
    55  	sq := make(chan *Session, 1)
    56  	err := receiveMessage(conn, sq)
    57  	close(sq)
    58  
    59  	if err != nil {
    60  		t.Fatalf("想定外のエラーが発生した: %s", err)
    61  	}
    62  
    63  	session := <-sq
    64  	if session == nil {
    65  		t.Error("セッションがキューに挿入されていない。")
    66  	}
    67  
    68  	if session.Conn == nil {
    69  		t.Error("セッションにコネクションオブジェクトがセットされていない。")
    70  	}
    71  
    72  	if session.Body != reqMsg {
    73  		t.Error("セッションにセットされたメッセージが間違っている。")
    74  		t.Logf("想定値: %s", reqMsg)
    75  		t.Logf("実績値: %s", session.Body)
    76  	}
    77  }
    78  
    79  func TestReceiveMessage_待ち期限の設定に失敗したらエラー(t *testing.T) {
    80  	conn := testutil.NewConnStub()
    81  	conn.ReadStr = `{"type":"request","id":1234,"path":"C:\\work\\test.bat","param":"test","workspace": "C:\\work"}`
    82  	conn.SetReadDeadlineErr = errors.New("testerror")
    83  	sq := make(chan *Session, 1)
    84  	err := receiveMessage(conn, sq)
    85  	close(sq)
    86  
    87  	if err == nil {
    88  		t.Fatal("エラーが発生していない。")
    89  	}
    90  
    91  	session := <-sq
    92  	if session != nil {
    93  		t.Error("エラーが発生したにも関わらず、セッションがキューに挿入された。")
    94  	}
    95  }
    96  
    97  func TestReceiveMessage_メッセージの読み込みに失敗したらエラー(t *testing.T) {
    98  	conn := testutil.NewConnStub()
    99  	conn.ReadStr = `{"type":"request","id":1234,"path":"C:\\work\\test.bat","param":"test","workspace": "C:\\work"}`
   100  	conn.ReadErr = errors.New("testerror")
   101  	sq := make(chan *Session, 1)
   102  	err := receiveMessage(conn, sq)
   103  	close(sq)
   104  
   105  	if err == nil {
   106  		t.Fatal("エラーが発生していない。")
   107  	}
   108  
   109  	session := <-sq
   110  	if session != nil {
   111  		t.Error("エラーが発生したにも関わらず、セッションがキューに挿入された。")
   112  	}
   113  }