11// Copyright 2020 New Relic Corporation. All rights reserved.
22// SPDX-License-Identifier: Apache-2.0
3+
4+ //nolint:exhaustruct
35package agent
46
57import (
8+ "errors"
9+ "regexp"
610 "testing"
711
12+ "github.com/newrelic/infrastructure-agent/pkg/log" //nolint:depguard
13+ logHelper "github.com/newrelic/infrastructure-agent/test/log"
14+ "github.com/sirupsen/logrus"
15+
816 "github.com/newrelic/infrastructure-agent/pkg/backend/identityapi"
917
1018 "github.com/stretchr/testify/assert"
@@ -14,45 +22,74 @@ import (
1422 "github.com/newrelic/infrastructure-agent/pkg/helpers/fingerprint"
1523)
1624
17- var (
18- testEntityId = entity.Identity {ID : 999666333 }
19- )
25+ // nolint:gochecknoglobals
26+ var testEntityID = entity.Identity {ID : 999666333 }
2027
21- type MockIdentityConnectClient struct {
22- }
28+ type MockIdentityConnectClient struct {}
2329
24- func (icc * MockIdentityConnectClient ) Connect (fp fingerprint.Fingerprint ) (entity.Identity , backendhttp.RetryPolicy , error ) {
30+ func (icc * MockIdentityConnectClient ) Connect (_ fingerprint.Fingerprint , _ identityapi. Metadata ) (entity.Identity , backendhttp.RetryPolicy , error ) {
2531 var retry backendhttp.RetryPolicy
26- return testEntityId , retry , nil
32+
33+ return testEntityID , retry , nil
2734}
2835
29- func (icc * MockIdentityConnectClient ) ConnectUpdate (entityID entity.Identity , fp fingerprint.Fingerprint ) (backendhttp.RetryPolicy , entity.Identity , error ) {
36+ func (icc * MockIdentityConnectClient ) ConnectUpdate (_ entity.Identity , _ fingerprint.Fingerprint , _ identityapi. Metadata ) (backendhttp.RetryPolicy , entity.Identity , error ) {
3037 var retry backendhttp.RetryPolicy
31- return retry , testEntityId , nil
38+
39+ return retry , testEntityID , nil
3240}
3341
34- func (icc * MockIdentityConnectClient ) Disconnect (entityID entity.ID , state identityapi.DisconnectReason ) error {
42+ func (icc * MockIdentityConnectClient ) Disconnect (_ entity.ID , _ identityapi.DisconnectReason ) error {
3543 return nil
3644}
3745
3846func TestConnect (t * testing.T ) {
39- service := NewIdentityConnectService (& MockIdentityConnectClient {}, & fingerprint.MockHarvestor {})
47+ metadataHarvester := & identityapi.MetadataHarvesterMock {}
48+ defer metadataHarvester .AssertExpectations (t )
49+ metadataHarvester .ShouldHarvest (identityapi.Metadata {})
50+
51+ service := NewIdentityConnectService (& MockIdentityConnectClient {}, & fingerprint.MockHarvestor {}, metadataHarvester )
52+
53+ assert .Equal (t , testEntityID , service .Connect ())
54+ }
55+
56+ func TestConnectOnMetadataError (t * testing.T ) {
57+ t .Parallel ()
58+
59+ metadataHarvester := & identityapi.MetadataHarvesterMock {}
60+ defer metadataHarvester .AssertExpectations (t )
61+ //nolint:goerr113
62+ metadataHarvester .ShouldNotHarvest (errors .New ("some error" ))
63+ metadataHarvester .ShouldHarvest (identityapi.Metadata {})
64+
65+ // WHEN we add a hook to the log to capture the "error" and "fatal" levels
66+ hook := logHelper .NewInMemoryEntriesHook ([]logrus.Level {logrus .ErrorLevel })
67+ log .AddHook (hook )
4068
41- assert .Equal (t , testEntityId , service .Connect ())
69+ service := NewIdentityConnectService (& MockIdentityConnectClient {}, & fingerprint.MockHarvestor {}, metadataHarvester )
70+
71+ assert .Equal (t , testEntityID , service .Connect ())
72+ assert .True (t , hook .EntryWithMessageExists (regexp .MustCompile (`metadata harvest failed` )))
4273}
4374
4475func TestConnectUpdate (t * testing.T ) {
45- service := NewIdentityConnectService (& MockIdentityConnectClient {}, & fingerprint.MockHarvestor {})
76+ metadataHarvester := & identityapi.MetadataHarvesterMock {}
77+ defer metadataHarvester .AssertExpectations (t )
78+ metadataHarvester .ShouldHarvest (identityapi.Metadata {})
79+
80+ service := NewIdentityConnectService (& MockIdentityConnectClient {}, & fingerprint.MockHarvestor {}, metadataHarvester )
4681 entityIdn , err := service .ConnectUpdate (entity.Identity {ID : 1 })
4782 assert .NoError (t , err )
48- assert .Equal (t , testEntityId , entityIdn )
83+ assert .Equal (t , testEntityID , entityIdn )
4984}
5085
5186func Test_ConnectUpdate_ReturnsSameIDForSameFingerprint (t * testing.T ) {
87+ metadataHarvester := identityapi.MetadataHarvesterMock {}
88+ defer metadataHarvester .AssertExpectations (t )
5289 harvester := & fingerprint.MockHarvestor {}
5390 mockFingerprint , _ := harvester .Harvest ()
5491 // explicitly setting null client to make sure we're not calling it IF we have the same fingerprint
55- service := NewIdentityConnectService (nil , harvester )
92+ service := NewIdentityConnectService (nil , harvester , & metadataHarvester )
5693 service .lastFingerprint = mockFingerprint
5794
5895 agentIdn := entity.Identity {ID : 1 }
@@ -67,13 +104,18 @@ func Test_ConnectUpdate_ReturnsSameDifferentIDForDifferentFingerprint(t *testing
67104 mockFingerprint , _ := harvester .Harvest ()
68105 mockFingerprint .Hostname = "someHostName"
69106
70- service := NewIdentityConnectService (& MockIdentityConnectClient {}, harvester )
107+ metadataHarvester := identityapi.MetadataHarvesterMock {}
108+ defer metadataHarvester .AssertExpectations (t )
109+
110+ metadataHarvester .ShouldHarvest (identityapi.Metadata {})
111+
112+ service := NewIdentityConnectService (& MockIdentityConnectClient {}, harvester , & metadataHarvester )
71113 service .lastFingerprint = mockFingerprint
72114
73115 agentIdn := entity.Identity {ID : 1 }
74116 entityID , err := service .ConnectUpdate (agentIdn )
75117
76118 assert .NoError (t , err )
77- assert .Equal (t , testEntityId , entityID )
78- assert .NotEqual (t , testEntityId , agentIdn )
119+ assert .Equal (t , testEntityID , entityID )
120+ assert .NotEqual (t , testEntityID , agentIdn )
79121}
0 commit comments