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 }