diff --git a/cmd/bucket-metadata-reload_test.go b/cmd/bucket-metadata-reload_test.go new file mode 100644 index 000000000..a991bcfd1 --- /dev/null +++ b/cmd/bucket-metadata-reload_test.go @@ -0,0 +1,54 @@ +// Copyright 2026 PGSTY contributors. +// SPDX-License-Identifier: AGPL-3.0-or-later + +package cmd + +import ( + "net/http" + "testing" + "time" + + "github.com/minio/minio/internal/auth" + "github.com/minio/minio/internal/grid" +) + +func TestPeerMetadataReloadWithEqualMaximumTimestamp(t *testing.T) { + defer DetectTestLeak(t)() + ExecObjectLayerAPITest(ExecObjectLayerAPITestArgs{t: t, objAPITest: testPeerMetadataReloadWithEqualMaximumTimestamp}) +} + +func testPeerMetadataReloadWithEqualMaximumTimestamp(obj ObjectLayer, instanceType, bucket string, _ http.Handler, _ auth.Credentials, t *testing.T) { + disk, err := loadBucketMetadata(t.Context(), obj, bucket) + if err != nil { + t.Fatal(err) + } + disk.TaggingConfigXML = []byte(`revisionnew`) + disk.TaggingConfigUpdatedAt = UTCNow() + // An unrelated configuration has the greatest timestamp in both records. + disk.PolicyConfigUpdatedAt = disk.TaggingConfigUpdatedAt.Add(time.Hour) + if err := disk.Save(t.Context(), obj); err != nil { + t.Fatal(err) + } + resident := disk + resident.TaggingConfigXML = []byte(`revisionold`) + resident.TaggingConfigUpdatedAt = disk.TaggingConfigUpdatedAt.Add(-time.Minute) + if err := resident.parseAllConfigs(t.Context(), obj); err != nil { + t.Fatal(err) + } + if !resident.lastUpdate().Equal(disk.lastUpdate()) { + t.Fatal("fixture must have equal maximum timestamps") + } + globalBucketMetadataSys.Set(bucket, resident) + + args := grid.MSS{peerRESTBucket: bucket} + if _, err := (&peerRESTServer{}).LoadBucketMetadataHandler(&args); err != nil { + t.Fatal(err) + } + tagging, _, err := globalBucketMetadataSys.GetTaggingConfig(bucket) + if err != nil { + t.Fatal(err) + } + if got := tagging.ToMap()["revision"]; got != "new" { + t.Errorf("%s: peer reload retained tag %q despite a newer tagging configuration", instanceType, got) + } +}