mirror of
https://github.com/coder/coder.git
synced 2026-06-02 20:48:20 +00:00
test: use not before in TestAgentConnectionMonitor_* (#21332)
fixes https://github.com/coder/internal/issues/1203 The matcher I wrote for TestAgentConnectionMonitor tested that `last_disconnected_at` was strictly _after_ the start of the test to ensure it was updated. This is too strict of a test because Windows in particular doesn't have high-resolution timers, so it's entirely possible to get the exact same timestamp from subsequent calls to `time.Now()`. This PR switches the test to _not before_ to cover this case. The results are just as valid because we always initialize the `last_disconnected_at` to something well before the test starts.
This commit is contained in:
@@ -94,7 +94,7 @@ func TestAgentConnectionMonitor_ContextCancel(t *testing.T) {
|
|||||||
Return(nil)
|
Return(nil)
|
||||||
mDB.EXPECT().UpdateWorkspaceAgentConnectionByID(
|
mDB.EXPECT().UpdateWorkspaceAgentConnectionByID(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
connectionUpdate(agentID, replicaID, withDisconnectedAfter(now)),
|
connectionUpdate(agentID, replicaID, withDisconnectedNotBefore(now)),
|
||||||
).
|
).
|
||||||
After(connected).
|
After(connected).
|
||||||
Times(1).
|
Times(1).
|
||||||
@@ -172,7 +172,7 @@ func TestAgentConnectionMonitor_PingTimeout(t *testing.T) {
|
|||||||
Return(nil)
|
Return(nil)
|
||||||
mDB.EXPECT().UpdateWorkspaceAgentConnectionByID(
|
mDB.EXPECT().UpdateWorkspaceAgentConnectionByID(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
connectionUpdate(agent.ID, replicaID, withDisconnectedAfter(now)),
|
connectionUpdate(agent.ID, replicaID, withDisconnectedNotBefore(now)),
|
||||||
).
|
).
|
||||||
After(connected).
|
After(connected).
|
||||||
Times(1).
|
Times(1).
|
||||||
@@ -235,7 +235,7 @@ func TestAgentConnectionMonitor_BuildOutdated(t *testing.T) {
|
|||||||
Return(nil)
|
Return(nil)
|
||||||
mDB.EXPECT().UpdateWorkspaceAgentConnectionByID(
|
mDB.EXPECT().UpdateWorkspaceAgentConnectionByID(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
connectionUpdate(agent.ID, replicaID, withDisconnectedAfter(now)),
|
connectionUpdate(agent.ID, replicaID, withDisconnectedNotBefore(now)),
|
||||||
).
|
).
|
||||||
After(connected).
|
After(connected).
|
||||||
Times(1).
|
Times(1).
|
||||||
@@ -320,7 +320,7 @@ func TestAgentConnectionMonitor_StartClose(t *testing.T) {
|
|||||||
Return(nil)
|
Return(nil)
|
||||||
mDB.EXPECT().UpdateWorkspaceAgentConnectionByID(
|
mDB.EXPECT().UpdateWorkspaceAgentConnectionByID(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
connectionUpdate(agent.ID, replicaID, withDisconnectedAfter(now)),
|
connectionUpdate(agent.ID, replicaID, withDisconnectedNotBefore(now)),
|
||||||
).
|
).
|
||||||
After(connected).
|
After(connected).
|
||||||
Times(1).
|
Times(1).
|
||||||
@@ -423,10 +423,10 @@ func (f *fakeUpdater) getUpdates() int {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type connectionUpdateMatcher struct {
|
type connectionUpdateMatcher struct {
|
||||||
agentID uuid.UUID
|
agentID uuid.UUID
|
||||||
replicaID uuid.UUID
|
replicaID uuid.UUID
|
||||||
disconnectedAt sql.NullTime
|
disconnectedAt sql.NullTime
|
||||||
disconnectedAfter sql.NullTime
|
disconnectedNotBefore sql.NullTime
|
||||||
}
|
}
|
||||||
|
|
||||||
type connectionUpdateMatcherOption func(m connectionUpdateMatcher) connectionUpdateMatcher
|
type connectionUpdateMatcherOption func(m connectionUpdateMatcher) connectionUpdateMatcher
|
||||||
@@ -442,9 +442,9 @@ func connectionUpdate(id, replica uuid.UUID, opts ...connectionUpdateMatcherOpti
|
|||||||
return m
|
return m
|
||||||
}
|
}
|
||||||
|
|
||||||
func withDisconnectedAfter(t time.Time) connectionUpdateMatcherOption {
|
func withDisconnectedNotBefore(t time.Time) connectionUpdateMatcherOption {
|
||||||
return func(m connectionUpdateMatcher) connectionUpdateMatcher {
|
return func(m connectionUpdateMatcher) connectionUpdateMatcher {
|
||||||
m.disconnectedAfter = sql.NullTime{
|
m.disconnectedNotBefore = sql.NullTime{
|
||||||
Valid: true,
|
Valid: true,
|
||||||
Time: t,
|
Time: t,
|
||||||
}
|
}
|
||||||
@@ -476,14 +476,14 @@ func (m connectionUpdateMatcher) Matches(x interface{}) bool {
|
|||||||
if args.LastConnectedReplicaID.UUID != m.replicaID {
|
if args.LastConnectedReplicaID.UUID != m.replicaID {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
if m.disconnectedAfter.Valid {
|
if m.disconnectedNotBefore.Valid {
|
||||||
if !args.DisconnectedAt.Valid {
|
if !args.DisconnectedAt.Valid {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
if !args.DisconnectedAt.Time.After(m.disconnectedAfter.Time) {
|
if args.DisconnectedAt.Time.Before(m.disconnectedNotBefore.Time) {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
// disconnectedAfter takes precedence over disconnectedAt
|
// disconnectedNotBefore takes precedence over disconnectedAt
|
||||||
} else if args.DisconnectedAt != m.disconnectedAt {
|
} else if args.DisconnectedAt != m.disconnectedAt {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
@@ -491,8 +491,8 @@ func (m connectionUpdateMatcher) Matches(x interface{}) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (m connectionUpdateMatcher) String() string {
|
func (m connectionUpdateMatcher) String() string {
|
||||||
return fmt.Sprintf("{agent=%s, replica=%s, disconnectedAt=%v, disconnectedAfter=%v}",
|
return fmt.Sprintf("{agent=%s, replica=%s, disconnectedAt=%v, disconnectedNotBefore=%v}",
|
||||||
m.agentID.String(), m.replicaID.String(), m.disconnectedAt, m.disconnectedAfter)
|
m.agentID.String(), m.replicaID.String(), m.disconnectedAt, m.disconnectedNotBefore)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (connectionUpdateMatcher) Got(x interface{}) string {
|
func (connectionUpdateMatcher) Got(x interface{}) string {
|
||||||
|
|||||||
Reference in New Issue
Block a user