github.com/yankunsam/loki/v2@v2.6.3-0.20220817130409-389df5235c27/clients/pkg/promtail/targets/gcplog/target_test.go (about)

     1  package gcplog
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  	"reflect"
     7  	"testing"
     8  
     9  	"github.com/go-kit/log"
    10  	"github.com/prometheus/client_golang/prometheus"
    11  	"github.com/prometheus/prometheus/model/relabel"
    12  	"github.com/stretchr/testify/assert"
    13  
    14  	"github.com/grafana/loki/clients/pkg/promtail/api"
    15  	"github.com/grafana/loki/clients/pkg/promtail/client/fake"
    16  	"github.com/grafana/loki/clients/pkg/promtail/scrapeconfig"
    17  )
    18  
    19  func TestNewGCPLogTarget(t *testing.T) {
    20  	w := log.NewSyncWriter(os.Stderr)
    21  	logger := log.NewLogfmtLogger(w)
    22  
    23  	// Create fake promtail client
    24  	eh := fake.New(func() {})
    25  	defer eh.Stop()
    26  
    27  	type args struct {
    28  		metrics *Metrics
    29  		logger  log.Logger
    30  		handler api.EntryHandler
    31  		relabel []*relabel.Config
    32  		jobName string
    33  		config  *scrapeconfig.GcplogTargetConfig
    34  	}
    35  	tests := []struct {
    36  		name     string
    37  		args     args
    38  		wantType interface{}
    39  		wantErr  assert.ErrorAssertionFunc
    40  	}{
    41  		{
    42  			name: "defaults to pull target",
    43  			args: args{
    44  				metrics: NewMetrics(prometheus.NewRegistry()),
    45  				logger:  logger,
    46  				handler: eh,
    47  				relabel: nil,
    48  				jobName: "test_job",
    49  				config: &scrapeconfig.GcplogTargetConfig{
    50  					SubscriptionType: "",
    51  				},
    52  			},
    53  			wantType: &pullTarget{},
    54  			wantErr:  assert.NoError,
    55  		},
    56  		{
    57  			name: "pull SubscriptionType creates new pull target",
    58  			args: args{
    59  				metrics: NewMetrics(prometheus.NewRegistry()),
    60  				logger:  logger,
    61  				handler: eh,
    62  				relabel: nil,
    63  				jobName: "test_job",
    64  				config: &scrapeconfig.GcplogTargetConfig{
    65  					SubscriptionType: "pull",
    66  				},
    67  			},
    68  			wantType: &pullTarget{},
    69  			wantErr:  assert.NoError,
    70  		},
    71  		{
    72  			name: "push SubscriptionType creates new pull target",
    73  			args: args{
    74  				metrics: NewMetrics(prometheus.NewRegistry()),
    75  				logger:  logger,
    76  				handler: eh,
    77  				relabel: nil,
    78  				jobName: "test_job",
    79  				config: &scrapeconfig.GcplogTargetConfig{
    80  					SubscriptionType: "push",
    81  				},
    82  			},
    83  			wantType: &pushTarget{},
    84  			wantErr:  assert.NoError,
    85  		},
    86  		{
    87  			name: "unknown subscription type fails to create target",
    88  			args: args{
    89  				metrics: NewMetrics(prometheus.NewRegistry()),
    90  				logger:  logger,
    91  				handler: eh,
    92  				relabel: nil,
    93  				jobName: "test_job",
    94  				config: &scrapeconfig.GcplogTargetConfig{
    95  					SubscriptionType: "magic",
    96  				},
    97  			},
    98  			wantErr: func(t assert.TestingT, err error, i ...interface{}) bool {
    99  				return assert.ErrorContains(t, err, "invalid subscription type: magic", i...)
   100  			},
   101  		},
   102  	}
   103  	for _, tt := range tests {
   104  		t.Run(tt.name, func(t *testing.T) {
   105  			// Since the push target underlying http server registers metrics in the default registerer, we have to override it to prevent duplicate metrics errors.
   106  			prometheus.DefaultRegisterer = prometheus.NewRegistry()
   107  
   108  			got, err := NewGCPLogTarget(tt.args.metrics, tt.args.logger, tt.args.handler, tt.args.relabel, tt.args.jobName, tt.args.config)
   109  			// If the target was started, stop it after test
   110  			if got != nil {
   111  				defer func() { _ = got.Stop() }()
   112  			}
   113  
   114  			if !tt.wantErr(t, err, fmt.Sprintf("NewGCPLogTarget(%v, %v, %v, %v, %v, %v)", tt.args.metrics, tt.args.logger, tt.args.handler, tt.args.relabel, tt.args.jobName, tt.args.config)) {
   115  				return
   116  			}
   117  			if err == nil {
   118  				assert.IsType(t, tt.wantType, got, "created target type different than expected: Got: %s", reflect.TypeOf(got).Name())
   119  			}
   120  		})
   121  	}
   122  }