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  }