|
9 | 9 | "github.com/kernel/hypeman/lib/autostandby" |
10 | 10 | "github.com/kernel/hypeman/lib/egressproxy" |
11 | 11 | "github.com/kernel/hypeman/lib/healthcheck" |
| 12 | + "github.com/kernel/hypeman/lib/redact" |
12 | 13 | snapshotstore "github.com/kernel/hypeman/lib/snapshot" |
13 | 14 | "github.com/stretchr/testify/assert" |
14 | 15 | "github.com/stretchr/testify/require" |
@@ -401,3 +402,56 @@ func TestManagerUpdateInstanceHealthCheckOnlyPublishesLifecycleUpdate(t *testing |
401 | 402 | t.Fatal("timed out waiting for lifecycle update event") |
402 | 403 | } |
403 | 404 | } |
| 405 | + |
| 406 | +func TestManagerUpdateInstanceIgnoresSentinelOnlyEnvUpdateOnStoppedInstance(t *testing.T) { |
| 407 | + t.Parallel() |
| 408 | + |
| 409 | + manager, _ := setupTestManager(t) |
| 410 | + id := "inst-update-sentinel-noop" |
| 411 | + require.NoError(t, manager.ensureDirectories(id)) |
| 412 | + meta := &metadata{ |
| 413 | + StoredMetadata: StoredMetadata{ |
| 414 | + Id: id, |
| 415 | + Name: id, |
| 416 | + CreatedAt: time.Now(), |
| 417 | + DataDir: manager.paths.InstanceDir(id), |
| 418 | + SocketPath: manager.paths.InstanceSocket(id, "cloud-hypervisor.sock"), |
| 419 | + NetworkEgress: &NetworkEgressPolicy{ |
| 420 | + Enabled: true, |
| 421 | + }, |
| 422 | + Credentials: map[string]CredentialPolicy{ |
| 423 | + "OUTBOUND_OPENAI_KEY": { |
| 424 | + Source: CredentialSource{Env: "OUTBOUND_OPENAI_KEY"}, |
| 425 | + }, |
| 426 | + }, |
| 427 | + Env: map[string]string{ |
| 428 | + "OUTBOUND_OPENAI_KEY": "real-secret", |
| 429 | + }, |
| 430 | + AutoStandby: &autostandby.Policy{ |
| 431 | + Enabled: false, |
| 432 | + IdleTimeout: "5m0s", |
| 433 | + }, |
| 434 | + }, |
| 435 | + } |
| 436 | + require.NoError(t, manager.saveMetadata(meta)) |
| 437 | + |
| 438 | + updated, err := manager.UpdateInstance(context.Background(), id, UpdateInstanceRequest{ |
| 439 | + Env: map[string]string{ |
| 440 | + "OUTBOUND_OPENAI_KEY": redact.Sentinel, |
| 441 | + }, |
| 442 | + AutoStandby: &autostandby.Policy{ |
| 443 | + Enabled: true, |
| 444 | + IdleTimeout: "10m", |
| 445 | + }, |
| 446 | + }) |
| 447 | + require.NoError(t, err) |
| 448 | + require.NotNil(t, updated) |
| 449 | + require.NotNil(t, updated.AutoStandby) |
| 450 | + assert.True(t, updated.AutoStandby.Enabled) |
| 451 | + assert.Equal(t, "10m0s", updated.AutoStandby.IdleTimeout) |
| 452 | + |
| 453 | + saved, err := manager.loadMetadata(id) |
| 454 | + require.NoError(t, err) |
| 455 | + require.NotNil(t, saved) |
| 456 | + assert.Equal(t, "real-secret", saved.Env["OUTBOUND_OPENAI_KEY"]) |
| 457 | +} |
0 commit comments