@@ -3,6 +3,7 @@ package coderd_test
3
3
import (
4
4
"database/sql"
5
5
"fmt"
6
+ "net"
6
7
"net/http"
7
8
"net/http/httptest"
8
9
"net/http/httputil"
@@ -12,13 +13,15 @@ import (
12
13
"time"
13
14
14
15
"github.com/google/uuid"
16
+ "github.com/sqlc-dev/pqtype"
15
17
"github.com/stretchr/testify/assert"
16
18
"github.com/stretchr/testify/require"
17
19
18
20
"cdr.dev/slog/sloggers/slogtest"
19
21
"github.com/coder/coder/v2/agent/agenttest"
20
22
"github.com/coder/coder/v2/buildinfo"
21
23
"github.com/coder/coder/v2/coderd/coderdtest"
24
+ "github.com/coder/coder/v2/coderd/connectionlog"
22
25
"github.com/coder/coder/v2/coderd/database"
23
26
"github.com/coder/coder/v2/coderd/database/db2sdk"
24
27
"github.com/coder/coder/v2/coderd/database/dbgen"
@@ -610,13 +613,18 @@ func TestProxyRegisterDeregister(t *testing.T) {
610
613
func TestIssueSignedAppToken (t * testing.T ) {
611
614
t .Parallel ()
612
615
616
+ connectionLogger := connectionlog .NewFake ()
617
+
613
618
client , user := coderdenttest .New (t , & coderdenttest.Options {
619
+ ConnectionLogging : true ,
614
620
Options : & coderdtest.Options {
615
621
IncludeProvisionerDaemon : true ,
622
+ ConnectionLogger : connectionLogger ,
616
623
},
617
624
LicenseOptions : & coderdenttest.LicenseOptions {
618
625
Features : license.Features {
619
626
codersdk .FeatureWorkspaceProxy : 1 ,
627
+ codersdk .FeatureConnectionLog : 1 ,
620
628
},
621
629
},
622
630
})
@@ -653,7 +661,7 @@ func TestIssueSignedAppToken(t *testing.T) {
653
661
// Invalid request.
654
662
AppRequest : workspaceapps.Request {},
655
663
SessionToken : client .SessionToken (),
656
- })
664
+ }, "127.0.0.1" )
657
665
require .Error (t , err )
658
666
})
659
667
@@ -669,41 +677,70 @@ func TestIssueSignedAppToken(t *testing.T) {
669
677
t .Parallel ()
670
678
proxyClient := wsproxysdk .New (client .URL , proxyRes .ProxyToken )
671
679
680
+ fakeClientIP := "13.37.13.37"
681
+ parsedFakeClientIP := pqtype.Inet {
682
+ Valid : true , IPNet : net.IPNet {
683
+ IP : net .ParseIP (fakeClientIP ),
684
+ Mask : net .CIDRMask (32 , 32 ),
685
+ },
686
+ }
687
+
672
688
ctx := testutil .Context (t , testutil .WaitLong )
673
- _ , err := proxyClient .IssueSignedAppToken (ctx , goodRequest )
689
+ _ , err := proxyClient .IssueSignedAppToken (ctx , goodRequest , fakeClientIP )
674
690
require .NoError (t , err )
691
+
692
+ require .True (t , connectionLogger .Contains (t , database.UpsertConnectionLogParams {
693
+ Ip : parsedFakeClientIP ,
694
+ }))
675
695
})
676
696
677
697
t .Run ("OKHTML" , func (t * testing.T ) {
678
698
t .Parallel ()
679
699
proxyClient := wsproxysdk .New (client .URL , proxyRes .ProxyToken )
680
700
701
+ fakeClientIP := "192.168.1.100"
702
+ parsedFakeClientIP := pqtype.Inet {
703
+ Valid : true , IPNet : net.IPNet {
704
+ IP : net .ParseIP (fakeClientIP ),
705
+ Mask : net .CIDRMask (32 , 32 ),
706
+ },
707
+ }
708
+
681
709
rw := httptest .NewRecorder ()
682
710
ctx := testutil .Context (t , testutil .WaitLong )
683
- _ , ok := proxyClient .IssueSignedAppTokenHTML (ctx , rw , goodRequest )
711
+ _ , ok := proxyClient .IssueSignedAppTokenHTML (ctx , rw , goodRequest , fakeClientIP )
684
712
if ! assert .True (t , ok , "expected true" ) {
685
713
resp := rw .Result ()
686
714
defer resp .Body .Close ()
687
715
dump , err := httputil .DumpResponse (resp , true )
688
716
require .NoError (t , err )
689
717
t .Log (string (dump ))
690
718
}
719
+
720
+ require .True (t , connectionLogger .Contains (t , database.UpsertConnectionLogParams {
721
+ Ip : parsedFakeClientIP ,
722
+ }))
691
723
})
692
724
}
693
725
694
726
func TestReconnectingPTYSignedToken (t * testing.T ) {
695
727
t .Parallel ()
696
728
729
+ connectionLogger := connectionlog .NewFake ()
730
+
697
731
db , pubsub := dbtestutil .NewDB (t )
698
732
client , closer , api , user := coderdenttest .NewWithAPI (t , & coderdenttest.Options {
733
+ ConnectionLogging : true ,
699
734
Options : & coderdtest.Options {
700
735
Database : db ,
701
736
Pubsub : pubsub ,
702
737
IncludeProvisionerDaemon : true ,
738
+ ConnectionLogger : connectionLogger ,
703
739
},
704
740
LicenseOptions : & coderdenttest.LicenseOptions {
705
741
Features : license.Features {
706
742
codersdk .FeatureWorkspaceProxy : 1 ,
743
+ codersdk .FeatureConnectionLog : 1 ,
707
744
},
708
745
},
709
746
})
@@ -887,6 +924,15 @@ func TestReconnectingPTYSignedToken(t *testing.T) {
887
924
888
925
// The token is validated in the apptest suite, so we don't need to
889
926
// validate it here.
927
+
928
+ require .True (t , connectionLogger .Contains (t , database.UpsertConnectionLogParams {
929
+ Ip : pqtype.Inet {
930
+ Valid : true , IPNet : net.IPNet {
931
+ IP : net .ParseIP ("127.0.0.1" ),
932
+ Mask : net .CIDRMask (32 , 32 ),
933
+ },
934
+ },
935
+ }))
890
936
})
891
937
}
892
938
0 commit comments