github.com/argoproj/argo-cd/v3@v3.2.1/reposerver/metrics/githandlers_test.go (about)

     1  package metrics
     2  
     3  import (
     4  	"os"
     5  	"testing"
     6  
     7  	"github.com/stretchr/testify/assert"
     8  	"golang.org/x/sync/semaphore"
     9  )
    10  
    11  func TestMain(m *testing.M) {
    12  	os.Exit(m.Run())
    13  }
    14  
    15  func TestEdgeCasesAndErrorHandling(t *testing.T) {
    16  	tests := []struct {
    17  		name     string
    18  		setup    func()
    19  		teardown func()
    20  		testFunc func(t *testing.T)
    21  	}{
    22  		{
    23  			name: "lsRemoteParallelismLimitSemaphore is nil",
    24  			testFunc: func(t *testing.T) {
    25  				t.Helper()
    26  				lsRemoteParallelismLimitSemaphore = nil
    27  				assert.NotPanics(t, func() {
    28  					NewGitClientEventHandlers(&MetricsServer{})
    29  				})
    30  			},
    31  		},
    32  		{
    33  			name: "lsRemoteParallelismLimitSemaphore is not nil",
    34  			setup: func() {
    35  				lsRemoteParallelismLimitSemaphore = semaphore.NewWeighted(1)
    36  			},
    37  			teardown: func() {
    38  				lsRemoteParallelismLimitSemaphore = nil
    39  			},
    40  			testFunc: func(t *testing.T) {
    41  				t.Helper()
    42  				assert.NotPanics(t, func() {
    43  					NewGitClientEventHandlers(&MetricsServer{})
    44  				})
    45  			},
    46  		},
    47  		{
    48  			name: "lsRemoteParallelismLimitSemaphore is not nil and Acquire returns error",
    49  			setup: func() {
    50  				lsRemoteParallelismLimitSemaphore = semaphore.NewWeighted(1)
    51  			},
    52  			teardown: func() {
    53  				lsRemoteParallelismLimitSemaphore = nil
    54  			},
    55  			testFunc: func(t *testing.T) {
    56  				t.Helper()
    57  				assert.NotPanics(t, func() {
    58  					NewGitClientEventHandlers(&MetricsServer{})
    59  				})
    60  			},
    61  		},
    62  	}
    63  	for _, tt := range tests {
    64  		t.Run(tt.name, func(t *testing.T) {
    65  			if tt.setup != nil {
    66  				tt.setup()
    67  			}
    68  			if tt.teardown != nil {
    69  				defer tt.teardown()
    70  			}
    71  			tt.testFunc(t)
    72  		})
    73  	}
    74  }
    75  
    76  func TestSemaphoreFunctionality(t *testing.T) {
    77  	t.Setenv("ARGOCD_GIT_LSREMOTE_PARALLELISM_LIMIT", "1")
    78  
    79  	tests := []struct {
    80  		name     string
    81  		setup    func()
    82  		teardown func()
    83  		testFunc func(t *testing.T)
    84  	}{
    85  		{
    86  			name: "lsRemoteParallelismLimitSemaphore is not nil",
    87  			setup: func() {
    88  				lsRemoteParallelismLimitSemaphore = semaphore.NewWeighted(1)
    89  			},
    90  			teardown: func() {
    91  				lsRemoteParallelismLimitSemaphore = nil
    92  			},
    93  			testFunc: func(t *testing.T) {
    94  				t.Helper()
    95  				assert.NotPanics(t, func() {
    96  					NewGitClientEventHandlers(&MetricsServer{})
    97  				})
    98  			},
    99  		},
   100  		{
   101  			name: "lsRemoteParallelismLimitSemaphore is not nil and Acquire returns error",
   102  			setup: func() {
   103  				lsRemoteParallelismLimitSemaphore = semaphore.NewWeighted(1)
   104  			},
   105  			teardown: func() {
   106  				lsRemoteParallelismLimitSemaphore = nil
   107  			},
   108  			testFunc: func(t *testing.T) {
   109  				t.Helper()
   110  				assert.NotPanics(t, func() {
   111  					NewGitClientEventHandlers(&MetricsServer{})
   112  				})
   113  			},
   114  		},
   115  	}
   116  	for _, tt := range tests {
   117  		t.Run(tt.name, func(t *testing.T) {
   118  			if tt.setup != nil {
   119  				tt.setup()
   120  			}
   121  			if tt.teardown != nil {
   122  				defer tt.teardown()
   123  			}
   124  			tt.testFunc(t)
   125  		})
   126  	}
   127  }