Skip to content

Commit

Permalink
Add test for non-default time zones on Windows
Browse files Browse the repository at this point in the history
  • Loading branch information
jefferbrecht committed Oct 6, 2022
1 parent 40c23ce commit 36602e3
Showing 1 changed file with 49 additions and 5 deletions.
54 changes: 49 additions & 5 deletions integration_test/ops_agent_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -208,6 +208,17 @@ func setupOpsAgent(ctx context.Context, logger *logging.DirectoryLogger, vm *gce
return setupOpsAgentFrom(ctx, logger, vm, config, locationFromEnvVars())
}

// restartOpsAgent restarts the Ops Agent and waits for it to become available.
func restartOpsAgent(ctx context.Context, logger *logging.DirectoryLogger, vm *gce.VM) error {
if _, err := gce.RunRemotely(ctx, logger.ToMainLog(), vm, "", restartCommandForPlatform(vm.Platform)); err != nil {
return fmt.Errorf("restartOpsAgent() failed to restart ops agent: %v", err)
}
// Give agents time to shut down. Fluent-Bit's default shutdown grace period
// is 5 seconds, so we should probably give it at least that long.
time.Sleep(10 * time.Second)
return nil
}

// setupOpsAgentFrom is an overload of setupOpsAgent that allows the callsite to
// decide which version of the agent gets installed.
func setupOpsAgentFrom(ctx context.Context, logger *logging.DirectoryLogger, vm *gce.VM, config string, location packageLocation) error {
Expand All @@ -224,12 +235,9 @@ func setupOpsAgentFrom(ctx context.Context, logger *logging.DirectoryLogger, vm
if err := gce.UploadContent(ctx, logger, vm, strings.NewReader(config), util.ConfigPathForPlatform(vm.Platform)); err != nil {
return fmt.Errorf("setupOpsAgent() failed to upload config file: %v", err)
}
if _, err := gce.RunRemotely(ctx, logger.ToMainLog(), vm, "", restartCommandForPlatform(vm.Platform)); err != nil {
return fmt.Errorf("setupOpsAgent() failed to restart ops agent: %v", err)
if err := restartOpsAgent(ctx, logger, vm); err != nil {
return err
}
// Give agents time to shut down. Fluent-Bit's default shutdown grace period
// is 5 seconds, so we should probably give it at least that long.
time.Sleep(10 * time.Second)
}
// Give agents time to start up.
time.Sleep(startupDelay)
Expand Down Expand Up @@ -1570,6 +1578,42 @@ func TestWindowsEventLog(t *testing.T) {
})
}

func TestWindowsEventLogWithNonDefaultTimeZone(t *testing.T) {
t.Parallel()
gce.RunForEachPlatform(t, func(t *testing.T, platform string) {
t.Parallel()
if !gce.IsWindows(platform) {
t.SkipNow()
}
ctx, logger, vm := agents.CommonSetup(t, platform)
if err := setupOpsAgent(ctx, logger, vm, ""); err != nil {
t.Fatal(err)
}
if _, err := gce.RunRemotely(ctx, logger.ToMainLog(), vm, "", `Set-TimeZone -Id "Eastern Standard Time"`); err != nil {
t.Fatal(err)
}
if err := restartOpsAgent(ctx, logger, vm); err != nil {
t.Fatal(err)
}

testString := "TestWindowsEventLogWithNonDefaultTimeZone"
writeToSystemLog(ctx, logger.ToMainLog(), vm, testString)
// Record the approximate time of the event
eventTime := time.Now()

// Validate that the log written to Cloud Logging has a timestamp that's
// close to eventTime. Use 24*time.Hour to cover all possible time zones.
logEntry, err := gce.QueryLog(ctx, logger.ToMainLog(), vm, "windows_event_log", 24*time.Hour, logMessageQueryForPlatform(platform, testString), gce.QueryMaxAttempts)
if err != nil {
t.Fatal(err)
}
timeDiff := eventTime.Sub(logEntry.Timestamp).Abs()
if timeDiff.Minutes() > 5 {
t.Fatalf("timestamp differs by %v minutes", timeDiff.Minutes())
}
})
}

func TestSystemdLog(t *testing.T) {
t.Parallel()
gce.RunForEachPlatform(t, func(t *testing.T, platform string) {
Expand Down

0 comments on commit 36602e3

Please sign in to comment.