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  }