github.com/netdata/go.d.plugin@v0.58.1/modules/freeradius/api/client_test.go (about) 1 // SPDX-License-Identifier: GPL-3.0-or-later 2 3 package api 4 5 import ( 6 "context" 7 "errors" 8 "testing" 9 10 "github.com/stretchr/testify/assert" 11 "github.com/stretchr/testify/require" 12 "layeh.com/radius" 13 ) 14 15 func TestNew(t *testing.T) { 16 assert.NotNil(t, New(Config{})) 17 } 18 19 func TestClient_Status(t *testing.T) { 20 var c Client 21 c.radiusClient = newOKMockFreeRADIUSClient() 22 23 expected := Status{ 24 AccessRequests: 1, 25 AccessAccepts: 2, 26 AccessRejects: 3, 27 AccessChallenges: 4, 28 AuthResponses: 5, 29 AuthDuplicateRequests: 6, 30 AuthMalformedRequests: 7, 31 AuthInvalidRequests: 8, 32 AuthDroppedRequests: 9, 33 AuthUnknownTypes: 10, 34 AccountingRequests: 11, 35 AccountingResponses: 12, 36 AcctDuplicateRequests: 13, 37 AcctMalformedRequests: 14, 38 AcctInvalidRequests: 15, 39 AcctDroppedRequests: 16, 40 AcctUnknownTypes: 17, 41 ProxyAccessRequests: 18, 42 ProxyAccessAccepts: 19, 43 ProxyAccessRejects: 20, 44 ProxyAccessChallenges: 21, 45 ProxyAuthResponses: 22, 46 ProxyAuthDuplicateRequests: 23, 47 ProxyAuthMalformedRequests: 24, 48 ProxyAuthInvalidRequests: 25, 49 ProxyAuthDroppedRequests: 26, 50 ProxyAuthUnknownTypes: 27, 51 ProxyAccountingRequests: 28, 52 ProxyAccountingResponses: 29, 53 ProxyAcctDuplicateRequests: 30, 54 ProxyAcctMalformedRequests: 31, 55 ProxyAcctInvalidRequests: 32, 56 ProxyAcctDroppedRequests: 33, 57 ProxyAcctUnknownTypes: 34, 58 } 59 60 s, err := c.Status() 61 62 require.NoError(t, err) 63 assert.Equal(t, expected, *s) 64 } 65 66 func TestClient_Status_ReturnsErrorIfClientExchangeReturnsError(t *testing.T) { 67 var c Client 68 c.radiusClient = newErrorMockFreeRADIUSClient() 69 70 s, err := c.Status() 71 72 assert.Nil(t, s) 73 assert.Error(t, err) 74 } 75 76 func TestClient_Status_ReturnsErrorIfServerResponseHasBadStatus(t *testing.T) { 77 var c Client 78 c.radiusClient = newBadRespCodeMockFreeRADIUSClient() 79 80 s, err := c.Status() 81 82 assert.Nil(t, s) 83 assert.Error(t, err) 84 } 85 86 type mockFreeRADIUSClient struct { 87 errOnExchange bool 88 badRespCode bool 89 } 90 91 func newOKMockFreeRADIUSClient() *mockFreeRADIUSClient { 92 return &mockFreeRADIUSClient{} 93 } 94 95 func newErrorMockFreeRADIUSClient() *mockFreeRADIUSClient { 96 return &mockFreeRADIUSClient{errOnExchange: true} 97 } 98 99 func newBadRespCodeMockFreeRADIUSClient() *mockFreeRADIUSClient { 100 return &mockFreeRADIUSClient{badRespCode: true} 101 } 102 103 func (m mockFreeRADIUSClient) Exchange(_ context.Context, _ *radius.Packet, _ string) (*radius.Packet, error) { 104 if m.errOnExchange { 105 return nil, errors.New("mock Exchange error") 106 } 107 resp := radius.New(radius.CodeAccessAccept, []byte("secret")) 108 if m.badRespCode { 109 resp.Code = radius.CodeAccessReject 110 } else { 111 resp.Code = radius.CodeAccessAccept 112 } 113 addValues(resp) 114 return resp, nil 115 } 116 117 func addValues(resp *radius.Packet) { 118 _ = FreeRADIUSTotalAccessRequests_Add(resp, 1) 119 _ = FreeRADIUSTotalAccessAccepts_Add(resp, 2) 120 _ = FreeRADIUSTotalAccessRejects_Add(resp, 3) 121 _ = FreeRADIUSTotalAccessChallenges_Add(resp, 4) 122 _ = FreeRADIUSTotalAuthResponses_Add(resp, 5) 123 _ = FreeRADIUSTotalAuthDuplicateRequests_Add(resp, 6) 124 _ = FreeRADIUSTotalAuthMalformedRequests_Add(resp, 7) 125 _ = FreeRADIUSTotalAuthInvalidRequests_Add(resp, 8) 126 _ = FreeRADIUSTotalAuthDroppedRequests_Add(resp, 9) 127 _ = FreeRADIUSTotalAuthUnknownTypes_Add(resp, 10) 128 _ = FreeRADIUSTotalAccountingRequests_Add(resp, 11) 129 _ = FreeRADIUSTotalAccountingResponses_Add(resp, 12) 130 _ = FreeRADIUSTotalAcctDuplicateRequests_Add(resp, 13) 131 _ = FreeRADIUSTotalAcctMalformedRequests_Add(resp, 14) 132 _ = FreeRADIUSTotalAcctInvalidRequests_Add(resp, 15) 133 _ = FreeRADIUSTotalAcctDroppedRequests_Add(resp, 16) 134 _ = FreeRADIUSTotalAcctUnknownTypes_Add(resp, 17) 135 _ = FreeRADIUSTotalProxyAccessRequests_Add(resp, 18) 136 _ = FreeRADIUSTotalProxyAccessAccepts_Add(resp, 19) 137 _ = FreeRADIUSTotalProxyAccessRejects_Add(resp, 20) 138 _ = FreeRADIUSTotalProxyAccessChallenges_Add(resp, 21) 139 _ = FreeRADIUSTotalProxyAuthResponses_Add(resp, 22) 140 _ = FreeRADIUSTotalProxyAuthDuplicateRequests_Add(resp, 23) 141 _ = FreeRADIUSTotalProxyAuthMalformedRequests_Add(resp, 24) 142 _ = FreeRADIUSTotalProxyAuthInvalidRequests_Add(resp, 25) 143 _ = FreeRADIUSTotalProxyAuthDroppedRequests_Add(resp, 26) 144 _ = FreeRADIUSTotalProxyAuthUnknownTypes_Add(resp, 27) 145 _ = FreeRADIUSTotalProxyAccountingRequests_Add(resp, 28) 146 _ = FreeRADIUSTotalProxyAccountingResponses_Add(resp, 29) 147 _ = FreeRADIUSTotalProxyAcctDuplicateRequests_Add(resp, 30) 148 _ = FreeRADIUSTotalProxyAcctMalformedRequests_Add(resp, 31) 149 _ = FreeRADIUSTotalProxyAcctInvalidRequests_Add(resp, 32) 150 _ = FreeRADIUSTotalProxyAcctDroppedRequests_Add(resp, 33) 151 _ = FreeRADIUSTotalProxyAcctUnknownTypes_Add(resp, 34) 152 }