master
go 152 lines 4.63 KB
Raw
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 }