mirror of
https://github.com/fleetdm/fleet
synced 2026-04-21 13:37:30 +00:00
<!-- Add the related story/sub-task/bug number, like Resolves #123, or remove if NA --> **Related issue:** Resolves #38889 PLEASE READ BELOW before looking at file changes Before converting individual files/packages to slog, we generally need to make these 2 changes to make the conversion easier: - Replace uses of `kitlog.With` since they are not fully compatible with our kitlog adapter - Directly use the kitlog adapter logger type instead of the kitlog interface, which will let us have direct access to the underlying slog logger: `*logging.Logger` Note: that I did not replace absolutely all uses of `kitlog.Logger`, but I did remove all uses of `kitlog.With` except for these due to complexity: - server/logging/filesystem.go and the other log writers (webhook, firehose, kinesis, lambda, pubsub, nats) - server/datastore/mysql/nanomdm_storage.go (adapter pattern) - server/vulnerabilities/nvd/* (cascades to CLI tools) - server/service/osquery_utils/queries.go (callback type signatures cascade broadly) - cmd/maintained-apps/ (standalone, so can be transitioned later all at once) Most of the changes in this PR follow these patterns: - `kitlog.Logger` type → `*logging.Logger` - `kitlog.With(logger, ...)` → `logger.With(...)` - `kitlog.NewNopLogger() → logging.NewNopLogger()`, including similar variations such as `logging.NewLogfmtLogger(w)` and `logging.NewJSONLogger(w)` - removed many now-unused kitlog imports Unique changes that the PR review should focus on: - server/platform/logging/kitlog_adapter.go: Core adapter changes - server/platform/logging/logging.go: New convenience functions - server/service/integration_logger_test.go: Test changes for slog # Checklist for submitter If some of the following don't apply, delete the relevant line. - [x] Changes file added for user-visible changes in `changes/`, `orbit/changes/` or `ee/fleetd-chrome/changes`. - Was added in previous PR ## Testing - [x] Added/updated automated tests - [x] QA'd all new/changed functionality manually <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Refactor** * Migrated the codebase to a unified internal structured logging system for more consistent, reliable logs and observability. * No user-facing functionality changed; runtime behavior and APIs remain compatible. * **Tests** * Updated tests to use the new logging helpers to ensure consistent test logging and validation. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
91 lines
2.3 KiB
Go
91 lines
2.3 KiB
Go
package fleetctl
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"io"
|
|
"os"
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/fleetdm/fleet/v4/cmd/fleetctl/fleetctl/testing_utils"
|
|
"github.com/fleetdm/fleet/v4/server/fleet"
|
|
"github.com/fleetdm/fleet/v4/server/platform/logging"
|
|
"github.com/fleetdm/fleet/v4/server/service"
|
|
"github.com/fleetdm/fleet/v4/server/service/schedule"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestTrigger(t *testing.T) {
|
|
const (
|
|
name = "test_sched"
|
|
instanceID = "test_instance"
|
|
interval = 5 * time.Minute
|
|
)
|
|
|
|
testCases := []struct {
|
|
args []string
|
|
delay time.Duration
|
|
expected string
|
|
}{
|
|
{
|
|
args: []string{"trigger"},
|
|
expected: fmt.Sprintf("[!] Name must be specified; supported trigger name is %s", name),
|
|
},
|
|
{
|
|
args: []string{"trigger", "--name", name},
|
|
expected: fmt.Sprintf("[+] Sent request to trigger %s schedule", name),
|
|
},
|
|
{
|
|
args: []string{"trigger", "--name", name},
|
|
delay: 10 * time.Millisecond,
|
|
expected: fmt.Sprintf("[!] Conflicts with current status of %s schedule: triggered run started", name),
|
|
},
|
|
{
|
|
args: []string{"trigger", "--name", "foo"},
|
|
expected: fmt.Sprintf("[!] Invalid name; supported trigger name is %s", name),
|
|
},
|
|
}
|
|
|
|
r, w, _ := os.Pipe()
|
|
oldStdout := os.Stdout
|
|
os.Stdout = w
|
|
|
|
_, _ = testing_utils.RunServerWithMockedDS(t, &service.TestServerOpts{
|
|
Logger: logging.NewNopLogger(),
|
|
StartCronSchedules: []service.TestNewScheduleFunc{
|
|
func(ctx context.Context, ds fleet.Datastore) fleet.NewCronScheduleFunc {
|
|
return func() (fleet.CronSchedule, error) {
|
|
s := schedule.New(ctx, name, instanceID, interval,
|
|
schedule.SetupMockLocker(name, instanceID, time.Now().Add(-1*time.Hour)),
|
|
schedule.SetUpMockStatsStore(name),
|
|
schedule.WithJob("test_job",
|
|
func(context.Context) error {
|
|
time.Sleep(100 * time.Millisecond)
|
|
return nil
|
|
}))
|
|
return s, nil
|
|
}
|
|
},
|
|
},
|
|
})
|
|
|
|
for _, c := range testCases {
|
|
if c.delay != 0 {
|
|
time.Sleep(c.delay)
|
|
}
|
|
assert.Equal(t, "", RunAppForTest(t, c.args))
|
|
}
|
|
|
|
os.Stdout = oldStdout
|
|
w.Close()
|
|
out, _ := io.ReadAll(r)
|
|
outlines := strings.Split(string(out), "\n")
|
|
require.Len(t, outlines, len(testCases)+1)
|
|
|
|
for i, c := range testCases {
|
|
require.True(t, strings.HasPrefix(outlines[i], c.expected))
|
|
}
|
|
}
|