github.com/unirita/cuto@v0.9.8-0.20160830082821-aa6652f877b7/flowgen/converter/parser_test.go (about) 1 package converter 2 3 import "testing" 4 5 func TestParseString(t *testing.T) { 6 s := ` 7 test1 -> 8 test2 -> 9 [ 10 test3, 11 test4 -> test5, 12 test6 13 ]->test7 14 ` 15 16 head, err := ParseString(s) 17 if err != nil { 18 t.Fatalf("Unexpected error occured: %s", err) 19 } 20 if head == nil { 21 t.Fatalf("Head job is not exist.") 22 } 23 headJob, ok := head.(*Job) 24 if !ok { 25 t.Fatalf("Head is not job element.") 26 } 27 if headJob.Name() != "test1" { 28 t.Errorf("Unexpected head job name[%s]", headJob.Name()) 29 } 30 31 second := head.Next() 32 if second == nil { 33 t.Fatalf("Second job is not exist.") 34 } 35 secondJob, ok := second.(*Job) 36 if !ok { 37 t.Fatalf("Second is not job element.") 38 } 39 if secondJob.Name() != "test2" { 40 t.Errorf("Unexpected second job name[%s]", secondJob.Name()) 41 } 42 43 third := second.Next() 44 if third == nil { 45 t.Fatalf("Third job is not exist.") 46 } 47 _, ok = third.(*Gateway) 48 if !ok { 49 t.Fatalf("Third element is not gateway element.") 50 } 51 52 forth := third.Next() 53 if forth == nil { 54 t.Fatalf("Forth job is not exist.") 55 } 56 forthJob, ok := forth.(*Job) 57 if !ok { 58 t.Fatalf("Forth is not job element.") 59 } 60 if forthJob.Name() != "test7" { 61 t.Errorf("Unexpected forth job name[%s]", forthJob.Name()) 62 } 63 } 64 65 func TestParseString_OnlyOneJob(t *testing.T) { 66 initIndexes() 67 s := "test1" 68 69 head, err := ParseString(s) 70 if err != nil { 71 t.Fatalf("Unexpected error occured: %s", err) 72 } 73 if head == nil { 74 t.Fatalf("Head job is not exist.") 75 } 76 if head.ID() != "job1" { 77 t.Errorf("Unexpected job id[%s].", head.ID()) 78 } 79 if head.Next() != nil { 80 t.Error("Head element has unexpected next element.") 81 } 82 } 83 84 func TestParseString_EmptyGateway(t *testing.T) { 85 s := "test1->[]->test2" 86 _, err := ParseString(s) 87 if err == nil { 88 t.Error("Error was not detected.") 89 } 90 } 91 92 func TestExtractGateways_EmptyPath(t *testing.T) { 93 s := "test1->[test2,,test3]->test4" 94 _, err := ParseString(s) 95 if err == nil { 96 t.Error("Error was not detected.") 97 } 98 } 99 100 func TestExtractGateways(t *testing.T) { 101 s := "test1->[test2,test3]->[test4,test5->test6]->test7" 102 afterStr, gws, err := extractGateways(s) 103 if err != nil { 104 t.Fatalf("Unexpected error occured: %s", err) 105 } 106 if afterStr != "test1->:gw->:gw->test7" { 107 t.Errorf("Gateway expression did not replace correctly. Result[%s]", afterStr) 108 } 109 if len(gws) != 2 { 110 t.Fatalf("Number of gateway[%d] is not expected value[%d].", len(gws), 2) 111 } 112 } 113 114 func TestParseJob(t *testing.T) { 115 j, err := parseJob("test") 116 if err != nil { 117 t.Fatalf("Unexpected error occured: %s", err) 118 } 119 if j.Name() != "test" { 120 t.Errorf("Unexpected job name[%s].", j.Name()) 121 } 122 } 123 124 func TestParseJob_DetectIrregalCharacters(t *testing.T) { 125 _, err := parseJob(`te\st`) 126 if err == nil { 127 t.Errorf("Irregal character[%s] is not detected as error.", `\`) 128 } 129 _, err = parseJob(`te/st`) 130 if err == nil { 131 t.Errorf("Irregal character[%s] is not detected as error.", `/`) 132 } 133 _, err = parseJob(`te:st`) 134 if err == nil { 135 t.Errorf("Irregal character[%s] is not detected as error.", `:`) 136 } 137 _, err = parseJob(`te*st`) 138 if err == nil { 139 t.Errorf("Irregal character[%s] is not detected as error.", `*`) 140 } 141 _, err = parseJob(`te?st`) 142 if err == nil { 143 t.Errorf("Irregal character[%s] is not detected as error.", `?`) 144 } 145 _, err = parseJob(`te<st`) 146 if err == nil { 147 t.Errorf("Irregal character[%s] is not detected as error.", `<`) 148 } 149 _, err = parseJob(`te>st`) 150 if err == nil { 151 t.Errorf("Irregal character[%s] is not detected as error.", `>`) 152 } 153 _, err = parseJob(`te$st`) 154 if err == nil { 155 t.Errorf("Irregal character[%s] is not detected as error.", `$`) 156 } 157 _, err = parseJob(`te&st`) 158 if err == nil { 159 t.Errorf("Irregal character[%s] is not detected as error.", `&`) 160 } 161 _, err = parseJob(`te,st`) 162 if err == nil { 163 t.Errorf("Irregal character[%s] is not detected as error.", `,`) 164 } 165 _, err = parseJob(`te-st`) 166 if err == nil { 167 t.Errorf("Irregal character[%s] is not detected as error.", `-`) 168 } 169 } 170 171 func TestParseGateway_SinglePath(t *testing.T) { 172 s := "[test1]" 173 p, err := parseGateway(s) 174 if err != nil { 175 t.Fatalf("Unexpected error occured: %s", err) 176 } 177 if p == nil { 178 t.Fatalf("Return value is nil.") 179 } 180 if len(p.PathHeads) != 1 { 181 t.Fatalf("PathHeads size[%d] must be %d.", len(p.PathHeads), 1) 182 } 183 if p.PathHeads[0].Name() != "test1" { 184 t.Errorf("Unexpected job name[%s].", p.PathHeads[0].Name()) 185 } 186 } 187 188 func TestParseGateway_SinglePath_MultiJob(t *testing.T) { 189 s := "[test1->test2->test3]" 190 p, err := parseGateway(s) 191 if err != nil { 192 t.Fatalf("Unexpected error occured: %s", err) 193 } 194 if p == nil { 195 t.Fatalf("Return value is nil.") 196 } 197 if len(p.PathHeads) != 1 { 198 t.Fatalf("PathHeads size[%d] must be %d.", len(p.PathHeads), 1) 199 } 200 201 head := p.PathHeads[0] 202 if head == nil { 203 t.Fatalf("Head job is not exist.") 204 } 205 if head.Name() != "test1" { 206 t.Errorf("Unexpected head job name[%s]", head.Name()) 207 } 208 209 second := head.Next() 210 if second == nil { 211 t.Fatalf("Second job is not exist.") 212 } 213 secondJob, ok := second.(*Job) 214 if !ok { 215 t.Fatalf("Second is not job element.") 216 } 217 if secondJob.Name() != "test2" { 218 t.Errorf("Unexpected second job name[%s]", secondJob.Name()) 219 } 220 221 third := second.Next() 222 if third == nil { 223 t.Fatalf("Third job is not exist.") 224 } 225 thirdJob, ok := third.(*Job) 226 if !ok { 227 t.Fatalf("Third is not job element.") 228 } 229 if thirdJob.Name() != "test3" { 230 t.Errorf("Unexpected third job name[%s]", thirdJob.Name()) 231 } 232 } 233 234 func TestParseGateway_MultiPath(t *testing.T) { 235 s := "[test1,test2,test3]" 236 p, err := parseGateway(s) 237 if err != nil { 238 t.Fatalf("Unexpected error occured: %s", err) 239 } 240 if p == nil { 241 t.Fatalf("Return value is nil.") 242 } 243 if len(p.PathHeads) != 3 { 244 t.Fatalf("PathHeads size[%d] must be %d.", len(p.PathHeads), 3) 245 } 246 if p.PathHeads[0].Name() != "test1" { 247 t.Errorf("Unexpected job name[%s].", p.PathHeads[0].Name()) 248 } 249 if p.PathHeads[1].Name() != "test2" { 250 t.Errorf("Unexpected job name[%s].", p.PathHeads[1].Name()) 251 } 252 if p.PathHeads[2].Name() != "test3" { 253 t.Errorf("Unexpected job name[%s].", p.PathHeads[2].Name()) 254 } 255 }