github.com/hxx258456/ccgo@v0.0.5-0.20230213014102-48b35f46f66f/grpc/internal/binarylog/regexp_test.go (about)

     1  /*
     2   *
     3   * Copyright 2018 gRPC authors.
     4   *
     5   * Licensed under the Apache License, Version 2.0 (the "License");
     6   * you may not use this file except in compliance with the License.
     7   * You may obtain a copy of the License at
     8   *
     9   *     http://www.apache.org/licenses/LICENSE-2.0
    10   *
    11   * Unless required by applicable law or agreed to in writing, software
    12   * distributed under the License is distributed on an "AS IS" BASIS,
    13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    14   * See the License for the specific language governing permissions and
    15   * limitations under the License.
    16   *
    17   */
    18  
    19  package binarylog
    20  
    21  import (
    22  	"reflect"
    23  	"testing"
    24  )
    25  
    26  func (s) TestLongMethodConfigRegexp(t *testing.T) {
    27  	testCases := []struct {
    28  		in  string
    29  		out []string
    30  	}{
    31  		{in: "", out: nil},
    32  		{in: "*/m", out: nil},
    33  
    34  		{
    35  			in:  "p.s/m{}",
    36  			out: []string{"p.s/m{}", "p.s", "m", "{}"},
    37  		},
    38  
    39  		{
    40  			in:  "p.s/m",
    41  			out: []string{"p.s/m", "p.s", "m", ""},
    42  		},
    43  		{
    44  			in:  "p.s/m{h}",
    45  			out: []string{"p.s/m{h}", "p.s", "m", "{h}"},
    46  		},
    47  		{
    48  			in:  "p.s/m{m}",
    49  			out: []string{"p.s/m{m}", "p.s", "m", "{m}"},
    50  		},
    51  		{
    52  			in:  "p.s/m{h:123}",
    53  			out: []string{"p.s/m{h:123}", "p.s", "m", "{h:123}"},
    54  		},
    55  		{
    56  			in:  "p.s/m{m:123}",
    57  			out: []string{"p.s/m{m:123}", "p.s", "m", "{m:123}"},
    58  		},
    59  		{
    60  			in:  "p.s/m{h:123,m:123}",
    61  			out: []string{"p.s/m{h:123,m:123}", "p.s", "m", "{h:123,m:123}"},
    62  		},
    63  
    64  		{
    65  			in:  "p.s/*",
    66  			out: []string{"p.s/*", "p.s", "*", ""},
    67  		},
    68  		{
    69  			in:  "p.s/*{h}",
    70  			out: []string{"p.s/*{h}", "p.s", "*", "{h}"},
    71  		},
    72  
    73  		{
    74  			in:  "s/m*",
    75  			out: []string{"s/m*", "s", "m", "*"},
    76  		},
    77  		{
    78  			in:  "s/**",
    79  			out: []string{"s/**", "s", "*", "*"},
    80  		},
    81  	}
    82  	for _, tc := range testCases {
    83  		match := longMethodConfigRegexp.FindStringSubmatch(tc.in)
    84  		if !reflect.DeepEqual(match, tc.out) {
    85  			t.Errorf("in: %q, out: %q, want: %q", tc.in, match, tc.out)
    86  		}
    87  	}
    88  }
    89  
    90  func (s) TestHeaderConfigRegexp(t *testing.T) {
    91  	testCases := []struct {
    92  		in  string
    93  		out []string
    94  	}{
    95  		{in: "{}", out: nil},
    96  		{in: "{a:b}", out: nil},
    97  		{in: "{m:123}", out: nil},
    98  		{in: "{h:123;m:123}", out: nil},
    99  
   100  		{
   101  			in:  "{h}",
   102  			out: []string{"{h}", ""},
   103  		},
   104  		{
   105  			in:  "{h:123}",
   106  			out: []string{"{h:123}", "123"},
   107  		},
   108  	}
   109  	for _, tc := range testCases {
   110  		match := headerConfigRegexp.FindStringSubmatch(tc.in)
   111  		if !reflect.DeepEqual(match, tc.out) {
   112  			t.Errorf("in: %q, out: %q, want: %q", tc.in, match, tc.out)
   113  		}
   114  	}
   115  }
   116  
   117  func (s) TestMessageConfigRegexp(t *testing.T) {
   118  	testCases := []struct {
   119  		in  string
   120  		out []string
   121  	}{
   122  		{in: "{}", out: nil},
   123  		{in: "{a:b}", out: nil},
   124  		{in: "{h:123}", out: nil},
   125  		{in: "{h:123;m:123}", out: nil},
   126  
   127  		{
   128  			in:  "{m}",
   129  			out: []string{"{m}", ""},
   130  		},
   131  		{
   132  			in:  "{m:123}",
   133  			out: []string{"{m:123}", "123"},
   134  		},
   135  	}
   136  	for _, tc := range testCases {
   137  		match := messageConfigRegexp.FindStringSubmatch(tc.in)
   138  		if !reflect.DeepEqual(match, tc.out) {
   139  			t.Errorf("in: %q, out: %q, want: %q", tc.in, match, tc.out)
   140  		}
   141  	}
   142  }
   143  
   144  func (s) TestHeaderMessageConfigRegexp(t *testing.T) {
   145  	testCases := []struct {
   146  		in  string
   147  		out []string
   148  	}{
   149  		{in: "{}", out: nil},
   150  		{in: "{a:b}", out: nil},
   151  		{in: "{h}", out: nil},
   152  		{in: "{h:123}", out: nil},
   153  		{in: "{m}", out: nil},
   154  		{in: "{m:123}", out: nil},
   155  
   156  		{
   157  			in:  "{h;m}",
   158  			out: []string{"{h;m}", "", ""},
   159  		},
   160  		{
   161  			in:  "{h:123;m}",
   162  			out: []string{"{h:123;m}", "123", ""},
   163  		},
   164  		{
   165  			in:  "{h;m:123}",
   166  			out: []string{"{h;m:123}", "", "123"},
   167  		},
   168  		{
   169  			in:  "{h:123;m:123}",
   170  			out: []string{"{h:123;m:123}", "123", "123"},
   171  		},
   172  	}
   173  	for _, tc := range testCases {
   174  		match := headerMessageConfigRegexp.FindStringSubmatch(tc.in)
   175  		if !reflect.DeepEqual(match, tc.out) {
   176  			t.Errorf("in: %q, out: %q, want: %q", tc.in, match, tc.out)
   177  		}
   178  	}
   179  }