@@ -39,25 +39,25 @@ import (
39
39
)
40
40
41
41
func TestDeploymentInsights (t * testing.T ) {
42
- t .Skipf ("This test is flaky: https://github.com/coder/coder/issues/12509" )
43
-
44
42
t .Parallel ()
45
43
46
44
clientTz ,err := time .LoadLocation ("America/Chicago" )
47
45
require .NoError (t ,err )
48
46
49
- db ,ps := dbtestutil .NewDB (t )
47
+ db ,ps := dbtestutil .NewDB (t , dbtestutil . WithDumpOnFailure () )
50
48
logger := slogtest .Make (t ,nil )
49
+ rollupEvents := make (chan dbrollup.Event )
51
50
client := coderdtest .New (t ,& coderdtest.Options {
52
51
Database :db ,
53
52
Pubsub :ps ,
54
53
Logger :& logger ,
55
54
IncludeProvisionerDaemon :true ,
56
- AgentStatsRefreshInterval :time .Millisecond * 50 ,
55
+ AgentStatsRefreshInterval :time .Millisecond * 100 ,
57
56
DatabaseRolluper :dbrollup .New (
58
- logger .Named ("dbrollup" ),
57
+ logger .Named ("dbrollup" ). Leveled ( slog . LevelDebug ) ,
59
58
db ,
60
59
dbrollup .WithInterval (time .Millisecond * 100 ),
60
+ dbrollup .WithEventChannel (rollupEvents ),
61
61
),
62
62
})
63
63
@@ -75,57 +75,51 @@ func TestDeploymentInsights(t *testing.T) {
75
75
workspace := coderdtest .CreateWorkspace (t ,client ,user .OrganizationID ,template .ID )
76
76
coderdtest .AwaitWorkspaceBuildJobCompleted (t ,client ,workspace .LatestBuild .ID )
77
77
78
- _ = agenttest .New (t ,client .URL ,authToken )
79
- resources := coderdtest .AwaitWorkspaceAgents (t ,client ,workspace .ID )
80
- ctx ,cancel := context .WithTimeout (context .Background (),testutil .WaitLong )
81
- defer cancel ()
78
+ ctx := testutil .Context (t ,testutil .WaitLong )
82
79
83
- daus ,err := client .DeploymentDAUs (context .Background (),codersdk .TimezoneOffsetHour (clientTz ))
80
+ // Pre-check, no permission issues.
81
+ daus ,err := client .DeploymentDAUs (ctx ,codersdk .TimezoneOffsetHour (clientTz ))
84
82
require .NoError (t ,err )
85
83
86
- res ,err := client .Workspaces (ctx , codersdk.WorkspaceFilter {})
87
- require .NoError (t ,err )
88
- assert .NotZero (t ,res .Workspaces [0 ].LastUsedAt )
84
+ _ = agenttest .New (t ,client .URL ,authToken )
85
+ resources := coderdtest .NewWorkspaceAgentWaiter (t ,client ,workspace .ID ).Wait ()
89
86
90
87
conn ,err := workspacesdk .New (client ).
91
88
DialAgent (ctx ,resources [0 ].Agents [0 ].ID ,& workspacesdk.DialAgentOptions {
92
- Logger :slogtest .Make (t ,nil ).Named ("tailnet " ),
89
+ Logger :slogtest .Make (t ,nil ).Named ("dialagent " ),
93
90
})
94
91
require .NoError (t ,err )
95
- defer func () {
96
- _ = conn .Close ()
97
- }()
92
+ defer conn .Close ()
98
93
99
94
sshConn ,err := conn .SSHClient (ctx )
100
95
require .NoError (t ,err )
101
- _ = sshConn .Close ()
96
+ defer sshConn .Close ()
102
97
103
- wantDAUs := & codersdk.DAUsResponse {
104
- TZHourOffset :codersdk .TimezoneOffsetHour (clientTz ),
105
- Entries : []codersdk.DAUEntry {
106
- {
107
- Date :time .Now ().In (clientTz ).Format ("2006-01-02" ),
108
- Amount :1 ,
109
- },
110
- },
111
- }
112
- require .Eventuallyf (t ,func ()bool {
113
- daus ,err = client .DeploymentDAUs (ctx ,codersdk .TimezoneOffsetHour (clientTz ))
114
- require .NoError (t ,err )
115
- return len (daus .Entries )> 0
116
- },
117
- testutil .WaitShort ,testutil .IntervalFast ,
118
- "deployment daus never loaded" ,
119
- )
120
- gotDAUs ,err := client .DeploymentDAUs (ctx ,codersdk .TimezoneOffsetHour (clientTz ))
98
+ sess ,err := sshConn .NewSession ()
121
99
require .NoError (t ,err )
122
- require . Equal ( t , gotDAUs , wantDAUs )
100
+ defer sess . Close ( )
123
101
124
- template ,err = client .Template (ctx ,template .ID )
102
+ r ,w := io .Pipe ()
103
+ defer r .Close ()
104
+ defer w .Close ()
105
+ sess .Stdin = r
106
+ sess .Stdout = io .Discard
107
+ err = sess .Start ("cat" )
125
108
require .NoError (t ,err )
126
109
127
- res ,err = client .Workspaces (ctx , codersdk.WorkspaceFilter {})
128
- require .NoError (t ,err )
110
+ for {
111
+ select {
112
+ case <- ctx .Done ():
113
+ require .Fail (t ,"timed out waiting for deployment daus to update" ,daus )
114
+ case <- rollupEvents :
115
+ }
116
+
117
+ daus ,err = client .DeploymentDAUs (ctx ,codersdk .TimezoneOffsetHour (clientTz ))
118
+ require .NoError (t ,err )
119
+ if len (daus .Entries )> 0 && daus .Entries [len (daus .Entries )- 1 ].Amount > 0 {
120
+ break
121
+ }
122
+ }
129
123
}
130
124
131
125
func TestUserActivityInsights_SanityCheck (t * testing.T ) {