(t *testing.T)
| 1232 | } |
| 1233 | |
| 1234 | func TestObjectStoreMirror(t *testing.T) { |
| 1235 | s := RunBasicJetStreamServer() |
| 1236 | defer shutdownJSServerAndRemoveStorage(t, s) |
| 1237 | |
| 1238 | nc, js := jsClient(t, s) |
| 1239 | defer nc.Close() |
| 1240 | |
| 1241 | bucketName := "test-bucket" |
| 1242 | |
| 1243 | ctx := context.Background() |
| 1244 | obs, err := js.CreateObjectStore(ctx, jetstream.ObjectStoreConfig{Bucket: bucketName, Description: "testing"}) |
| 1245 | expectOk(t, err) |
| 1246 | |
| 1247 | mirrorBucketName := "mirror-test-bucket" |
| 1248 | |
| 1249 | _, err = js.CreateStream(ctx, jetstream.StreamConfig{ |
| 1250 | Name: fmt.Sprintf("OBJ_%s", mirrorBucketName), |
| 1251 | Mirror: &jetstream.StreamSource{ |
| 1252 | Name: fmt.Sprintf("OBJ_%s", bucketName), |
| 1253 | SubjectTransforms: []jetstream.SubjectTransformConfig{ |
| 1254 | { |
| 1255 | Source: fmt.Sprintf("$O.%s.>", bucketName), |
| 1256 | Destination: fmt.Sprintf("$O.%s.>", mirrorBucketName), |
| 1257 | }, |
| 1258 | }, |
| 1259 | }, |
| 1260 | AllowRollup: true, // meta messages are always rollups |
| 1261 | }) |
| 1262 | if err != nil { |
| 1263 | t.Fatalf("Error creating object store bucket mirror: %v", err) |
| 1264 | } |
| 1265 | |
| 1266 | _, err = obs.PutString(ctx, "A", "abc") |
| 1267 | expectOk(t, err) |
| 1268 | |
| 1269 | mirrorObs, err := js.ObjectStore(ctx, mirrorBucketName) |
| 1270 | expectOk(t, err) |
| 1271 | |
| 1272 | // Make sure we sync. |
| 1273 | checkFor(t, 2*time.Second, 15*time.Millisecond, func() error { |
| 1274 | mirrorValue, err := mirrorObs.GetString(ctx, "A") |
| 1275 | if err != nil { |
| 1276 | return err |
| 1277 | } |
| 1278 | if mirrorValue != "abc" { |
| 1279 | t.Fatalf("Expected mirrored object store value to be the same as original") |
| 1280 | } |
| 1281 | return nil |
| 1282 | }) |
| 1283 | |
| 1284 | watcher, err := mirrorObs.Watch(ctx) |
| 1285 | if err != nil { |
| 1286 | t.Fatalf("Error creating watcher: %v", err) |
| 1287 | } |
| 1288 | defer watcher.Stop() |
| 1289 | |
| 1290 | // expect to get one value and nil |
| 1291 | for { |
nothing calls this directly
no test coverage detected