github.com/GuanceCloud/cliutils@v1.1.21/pipeline/ptinput/funcs/fn_pt_name_test.go (about)

     1  // Unless explicitly stated otherwise all files in this repository are licensed
     2  // under the MIT License.
     3  // This product includes software developed at Guance Cloud (https://www.guance.com/).
     4  // Copyright 2021-present Guance, Inc.
     5  
     6  package funcs
     7  
     8  import (
     9  	"testing"
    10  	"time"
    11  
    12  	"github.com/GuanceCloud/cliutils/pipeline/ptinput"
    13  	"github.com/GuanceCloud/cliutils/point"
    14  	"github.com/stretchr/testify/assert"
    15  )
    16  
    17  func TestPtName(t *testing.T) {
    18  	defatultPtName := "default"
    19  
    20  	cases := []struct {
    21  		name, pl, in string
    22  		out          string
    23  		expect       string
    24  		fail         bool
    25  	}{
    26  		{
    27  			name: "pt_name_set_and_get",
    28  			in:   `162.62.81.1 - - [29/Nov/2021:07:30:50 +0000] "123 /?signature=b8d8ea&timestamp=1638171049 HTTP/1.1" 200 413 "-" "Mozilla/4.0"`,
    29  			pl: `
    30  		set_tag(client_ip)
    31  		grok(_, "%{IPORHOST:client_ip} %{NOTSPACE} %{NOTSPACE} \\[%{HTTPDATE:time}\\] \"%{DATA:data} %{GREEDYDATA} HTTP/%{NUMBER}\" %{INT:status_code} %{INT:bytes}")
    32  		cast(data, "int")
    33  		add_key("pt_name",pt_name(client_ip))
    34  
    35  		`,
    36  			out:    "pt_name",
    37  			expect: "162.62.81.1",
    38  			fail:   false,
    39  		},
    40  		{
    41  			name: "pt_name_set_str_and_get",
    42  			in:   `162.62.81.1 - - [29/Nov/2021:07:30:50 +0000] "123 /?signature=b8d8ea&timestamp=1638171049 HTTP/1.1" 200 413 "-" "Mozilla/4.0"`,
    43  			pl: `
    44  		set_tag(client_ip)
    45  		grok(_, "%{IPORHOST:client_ip} %{NOTSPACE} %{NOTSPACE} \\[%{HTTPDATE:time}\\] \"%{DATA:data} %{GREEDYDATA} HTTP/%{NUMBER}\" %{INT:status_code} %{INT:bytes}")
    46  		cast(data, "int")
    47  		add_key("pt_name", pt_name("aa"))
    48  
    49  		`,
    50  			out:    "pt_name",
    51  			expect: "aa",
    52  			fail:   false,
    53  		},
    54  		{
    55  			name: "pt_name_set_int_1_and_get",
    56  			in:   `162.62.81.1 - - [29/Nov/2021:07:30:50 +0000] "123 /?signature=b8d8ea&timestamp=1638171049 HTTP/1.1" 200 413 "-" "Mozilla/4.0"`,
    57  			pl: `
    58  		set_tag(client_ip)
    59  		grok(_, "%{IPORHOST:client_ip} %{NOTSPACE} %{NOTSPACE} \\[%{HTTPDATE:time}\\] \"%{DATA:data} %{GREEDYDATA} HTTP/%{NUMBER}\" %{INT:status_code} %{INT:bytes}")
    60  		cast(data, "int")
    61  		add_key("pt_name",pt_name(1))
    62  
    63  		`,
    64  			out:    "pt_name",
    65  			expect: defatultPtName,
    66  			fail:   false,
    67  		},
    68  		{
    69  			name: "pt_name_set_int_var_and_get",
    70  			in:   `162.62.81.1 - - [29/Nov/2021:07:30:50 +0000] "123 /?signature=b8d8ea&timestamp=1638171049 HTTP/1.1" 200 413 "-" "Mozilla/4.0"`,
    71  			pl: `
    72  		set_tag(client_ip)
    73  		grok(_, "%{IPORHOST:client_ip} %{NOTSPACE} %{NOTSPACE} \\[%{HTTPDATE:time}\\] \"%{DATA:data} %{GREEDYDATA} HTTP/%{NUMBER}\" %{INT:status_code} %{INT:bytes}")
    74  		cast(data, "int")
    75  		a=1
    76  		add_key("pt_name",pt_name(aa))
    77  		`,
    78  			out:    "pt_name",
    79  			expect: defatultPtName,
    80  			fail:   false,
    81  		},
    82  		{
    83  			name: "pt_name_get",
    84  			in:   `162.62.81.1 - - [29/Nov/2021:07:30:50 +0000] "123 /?signature=b8d8ea&timestamp=1638171049 HTTP/1.1" 200 413 "-" "Mozilla/4.0"`,
    85  			pl: `
    86  		grok(_, "%{IPORHOST:client_ip} %{NOTSPACE} %{NOTSPACE} \\[%{HTTPDATE:time}\\] \"%{DATA:data} %{GREEDYDATA} HTTP/%{NUMBER}\" %{INT:status_code} %{INT:bytes}")
    87  		set_tag(client_ip)
    88  		cast(data, "int")
    89  		add_key("pt_name", pt_name())
    90  		`,
    91  			out:    "pt_name",
    92  			expect: defatultPtName,
    93  			fail:   false,
    94  		},
    95  	}
    96  
    97  	for idx, tc := range cases {
    98  		t.Run(tc.name, func(t *testing.T) {
    99  			runner, err := NewTestingRunner(tc.pl)
   100  			if err != nil {
   101  				if tc.fail {
   102  					t.Logf("[%d]expect error: %s", idx, err)
   103  				} else {
   104  					t.Errorf("[%d] failed: %s", idx, err)
   105  				}
   106  				return
   107  			}
   108  			pt := ptinput.NewPlPoint(
   109  				point.Logging, defatultPtName, nil, map[string]any{"message": tc.in}, time.Now())
   110  			errR := runScript(runner, pt)
   111  
   112  			if errR != nil {
   113  				t.Fatal(errR.Error())
   114  			}
   115  
   116  			_, _, e := pt.Get(tc.out)
   117  			assert.NoError(t, e)
   118  			assert.Equal(t, tc.expect, pt.GetPtName())
   119  			t.Logf("[%d] PASS", idx)
   120  		})
   121  	}
   122  }