github.com/hy3/cuto@v0.9.8-0.20160830082821-aa6652f877b7/db/tx/jobnettx_test.go (about)

     1  // Copyright 2015 unirita Inc.
     2  // Created 2015/04/10 shanxia
     3  
     4  package tx
     5  
     6  import (
     7  	"path/filepath"
     8  	"testing"
     9  
    10  	"github.com/unirita/cuto/db"
    11  	"github.com/unirita/cuto/db/query"
    12  	"github.com/unirita/cuto/testutil"
    13  )
    14  
    15  // テストDB名
    16  var db_path = filepath.Join(testutil.GetBaseDir(), "db", "tx", "_testdata")
    17  var db_name = filepath.Join(db_path, "test_tx.sqlite")
    18  
    19  // DB接続後の失敗を誘うためのダミーファイル
    20  var dummy_db = filepath.Join(db_path, "dummy.sqlite")
    21  
    22  // DBの初期化。
    23  func init() {
    24  	conn, err := db.Open(db_name)
    25  	if err != nil {
    26  		panic(err.Error())
    27  	}
    28  	defer conn.Close()
    29  
    30  	conn.GetDbMap().DropTables()
    31  	err = conn.GetDbMap().CreateTables()
    32  	if err != nil {
    33  		panic(err.Error())
    34  	}
    35  	// テストを繰り返すとDBが肥大化する対策
    36  	conn.GetDb().Exec("vacuum")
    37  }
    38  
    39  // DBを検査して、登録件数と内容を取得する。
    40  func verifyDb(nid int) (int, *db.JobNetworkResult) {
    41  	conn, err := db.Open(db_name)
    42  	if err != nil {
    43  		panic(err.Error())
    44  	}
    45  	defer conn.Close()
    46  
    47  	num := query.JobnetworkCountAll(conn)
    48  
    49  	res, err := query.GetJobnetwork(conn, nid)
    50  	if err != nil {
    51  		panic(err)
    52  	}
    53  	return num, res
    54  }
    55  
    56  func TestStartJobNetwork_ジョブネットワークの開始ステータスが正常か(t *testing.T) {
    57  	name := "JNet1"
    58  
    59  	resMap, err := StartJobNetwork(name, db_name)
    60  	if err != nil {
    61  		t.Errorf("エラーがすべきでないパターンで、エラーが発生しました。: %s", err.Error())
    62  	}
    63  	if resMap.JobnetResult.Status != db.RUNNING {
    64  		t.Errorf("ジョブネットワークのステータスが[%v]になるべきところ、[%v]になっています。", db.RUNNING, resMap.JobnetResult.Status)
    65  	}
    66  	// DB検証
    67  	num, res := verifyDb(resMap.JobnetResult.ID)
    68  	if num != 1 {
    69  		t.Errorf("登録件数が1件のはずが、[%v]件見つかりました。", num)
    70  	}
    71  	if res.JobnetWork != name {
    72  		t.Errorf("[%v]が見つかるはずが、異なるジョブネット[%v]が返りました。", name, res.JobnetWork)
    73  	}
    74  
    75  	c := resMap.GetConnection()
    76  	if c == nil {
    77  		t.Error("コネクションの取得に失敗しました。")
    78  	}
    79  }
    80  
    81  func TestStartJobNetwork_DBOpenに失敗(t *testing.T) {
    82  	name := "JNet1"
    83  
    84  	_, err := StartJobNetwork(name, "db_name")
    85  	if err == nil {
    86  		t.Error("存在しないDBファイルを指定したのに、エラーが返りませんでした")
    87  	}
    88  }
    89  
    90  func TestStartJobNetwork_Insertに失敗(t *testing.T) {
    91  	name := "JNet1"
    92  
    93  	_, err := StartJobNetwork(name, dummy_db)
    94  	if err == nil {
    95  		t.Error("存在しないDBファイルを指定したのに、エラーが返りませんでした")
    96  	}
    97  }
    98  
    99  func TestResumeJobNetwork_前回の実行実績を取得できる(t *testing.T) {
   100  	dbfile := filepath.Join(db_path, "resume.sqlite")
   101  	res, err := ResumeJobNetwork(1, dbfile)
   102  	if err != nil {
   103  		t.Fatalf("想定外のエラーが発生した: %s", err)
   104  	}
   105  
   106  	if res.JobnetResult.JobnetWork != "JNet1" {
   107  		t.Errorf("ジョブネット[%s]が見つかるはずが、異なるジョブネット[%s]が返りました。", res.JobnetResult.JobnetWork, "JNet1")
   108  	}
   109  	if len(res.jobresults) != 2 {
   110  		t.Fatalf("ジョブ実行結果の件数が%d件取得されるはずが、%d件取得された。", 2, len(res.jobresults))
   111  	}
   112  	if _, ok := res.jobresults["JOB001"]; !ok {
   113  		t.Errorf("ジョブ[%s]の実行結果が取得されるはずが、されなかった。", "JOB001")
   114  	}
   115  	if _, ok := res.jobresults["JOB002"]; !ok {
   116  		t.Errorf("ジョブ[%s]の実行結果が取得されるはずが、されなかった。", "JOB002")
   117  	}
   118  }
   119  
   120  func TestResumeJobNetwork_DBOpenに失敗(t *testing.T) {
   121  	_, err := ResumeJobNetwork(1, "db_name")
   122  	if err == nil {
   123  		t.Error("存在しないDBファイルを指定したのに、エラーが返りませんでした")
   124  	}
   125  }
   126  
   127  func TestResumeJobNetwork_Selectに失敗(t *testing.T) {
   128  	_, err := ResumeJobNetwork(1, dummy_db)
   129  	if err == nil {
   130  		t.Error("不正なDBファイルを指定したのに、エラーが返りませんでした")
   131  	}
   132  }
   133  
   134  func TestEndJobNetwork_ジョブネットワークの開始ステータスに正常を登録(t *testing.T) {
   135  	// ここからはテスト前データ登録 ///////
   136  	name := "JNet2"
   137  
   138  	resMap, err := StartJobNetwork(name, db_name)
   139  	if resMap.JobnetResult.Status != db.RUNNING {
   140  		t.Errorf("ジョブネットワークのステータスが[%v]になるべきところ、[%v]になっています。", db.RUNNING, resMap.JobnetResult.Status)
   141  	}
   142  	if err != nil {
   143  		t.Errorf("エラーがすべきでないパターンで、エラーが発生しました。: %s", err.Error())
   144  	}
   145  	// ここまで ///////
   146  
   147  	resMap.EndJobNetwork(db.NORMAL, "")
   148  
   149  	if resMap.JobnetResult.Status != db.NORMAL {
   150  		t.Errorf("ジョブネットワークのステータスが[%v]になるべきところ、[%v]が返りました。", db.NORMAL, resMap.JobnetResult.Status)
   151  	}
   152  	// DB検証
   153  	num, res := verifyDb(resMap.JobnetResult.ID)
   154  	if num != 2 {
   155  		t.Errorf("登録件数が2件のはずが、[%v]件見つかりました。", num)
   156  	}
   157  	if res.JobnetWork != name {
   158  		t.Errorf("[%v]が見つかるはずが、異なるジョブネット[%v]が返りました。", name, res.JobnetWork)
   159  	}
   160  	if res.Status != db.NORMAL {
   161  		t.Errorf("ジョブネットワークのステータスが[%v]になるべきところ、[%v]がDBに登録されていました。", db.NORMAL, res.Status)
   162  	}
   163  }
   164  
   165  func TestEndJobNetwork_ジョブネットワークの開始ステータスに異常を登録(t *testing.T) {
   166  	// ここからはテスト前データ登録 ///////
   167  	name := "JNet3"
   168  
   169  	resMap, err := StartJobNetwork(name, db_name)
   170  	if resMap.JobnetResult.Status != db.RUNNING {
   171  		t.Fatalf("ジョブネットワークのステータスが[%v]になるべきところ、[%v]になっています。", db.RUNNING, resMap.JobnetResult.Status)
   172  	}
   173  	if err != nil {
   174  		t.Fatalf("エラーがすべきでないパターンで、エラーが発生しました。: %s", err.Error())
   175  	}
   176  	// ここまで ///////
   177  	detail := "An accident occurred."
   178  
   179  	resMap.EndJobNetwork(db.ABNORMAL, detail)
   180  	if resMap.JobnetResult.Status != db.ABNORMAL {
   181  		t.Errorf("ジョブネットワークのステータスが[%v]になるべきところ、[%v]が返りました。", db.ABNORMAL, resMap.JobnetResult.Status)
   182  	}
   183  	if resMap.JobnetResult.Detail != detail {
   184  		t.Errorf("ジョブネットワークの詳細メッセージ[%v]が返るべきところ、[%v]が返りました。", detail, resMap.JobnetResult.Detail)
   185  	}
   186  	// DB検証
   187  	num, res := verifyDb(resMap.JobnetResult.ID)
   188  	if num != 3 {
   189  		t.Errorf("登録件数が3件のはずが、[%v]件見つかりました。", num)
   190  	}
   191  	if res.JobnetWork != name {
   192  		t.Errorf("[%v]が見つかるはずが、異なるジョブネット[%v]が返りました。", name, res.JobnetWork)
   193  	}
   194  	if res.Status != db.ABNORMAL {
   195  		t.Errorf("ジョブネットワークのステータスが[%v]になるべきところ、[%v]がDBに登録されていました。", db.NORMAL, res.Status)
   196  	}
   197  }
   198  
   199  func TestEndJobNetwork_不正なジョブネットワーク情報(t *testing.T) {
   200  	con, err := db.Open(dummy_db)
   201  	if err != nil {
   202  		t.Fatalf("DB接続に失敗しました。 - %v", err)
   203  	}
   204  	resMap := &ResultMap{
   205  		conn: con,
   206  	}
   207  	err = resMap.EndJobNetwork(0, "")
   208  	if err == nil {
   209  		t.Error("エラーが返るべきところ、成功しました。")
   210  	}
   211  }
   212  
   213  func TestEndJobNetwork_更新失敗(t *testing.T) {
   214  	resMap := &ResultMap{}
   215  	err := resMap.EndJobNetwork(0, "")
   216  	if err == nil {
   217  		t.Error("エラーが返るべきところ、成功しました。")
   218  	}
   219  }
   220  
   221  func TestEndJobNetwork_接続失敗(t *testing.T) {
   222  	con, err := db.Open(dummy_db)
   223  	if err != nil {
   224  		t.Fatalf("DB接続に失敗しました。 - %v", err)
   225  	}
   226  	jobnet := &db.JobNetworkResult{}
   227  	resMap := &ResultMap{
   228  		JobnetResult: jobnet,
   229  		conn:         con,
   230  	}
   231  	err = resMap.EndJobNetwork(0, "")
   232  	if err == nil {
   233  		t.Error("エラーが返るべきところ、成功しました。")
   234  	}
   235  }