MCPcopy Create free account
hub / github.com/couchbase/sync_gateway / TestUpdateExistingAttachment

Function TestUpdateExistingAttachment

rest/attachment_test.go:2324–2378  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

2322}
2323
2324func TestUpdateExistingAttachment(t *testing.T) {
2325 rtConfig := &RestTesterConfig{
2326 GuestEnabled: true,
2327 }
2328
2329 btcRunner := NewBlipTesterClientRunner(t)
2330 const (
2331 doc1ID = "doc1"
2332 doc2ID = "doc2"
2333 )
2334
2335 btcRunner.Run(func(t *testing.T) {
2336 rt := NewRestTester(t, rtConfig)
2337 defer rt.Close()
2338
2339 btc := btcRunner.NewBlipTesterClientOptsWithRT(rt, nil)
2340 defer btc.Close()
2341
2342 btcRunner.StartPull(btc.id)
2343 btcRunner.StartPush(btc.id)
2344
2345 doc1Version := rt.PutDoc(doc1ID, `{}`)
2346 doc2Version := rt.PutDoc(doc2ID, `{}`)
2347
2348 btcRunner.WaitForVersion(btc.id, doc1ID, doc1Version)
2349 btcRunner.WaitForVersion(btc.id, doc2ID, doc2Version)
2350
2351 attachmentAData := base64.StdEncoding.EncodeToString([]byte("attachmentA"))
2352 attachmentBData := base64.StdEncoding.EncodeToString([]byte("attachmentB"))
2353
2354 doc1Version = btcRunner.AddRev(btc.id, doc1ID, &doc1Version, []byte(`{"key": "val", "_attachments": {"attachment": {"data": "`+attachmentAData+`"}}}`))
2355 doc2Version = btcRunner.AddRev(btc.id, doc2ID, &doc2Version, []byte(`{"key": "val", "_attachments": {"attachment": {"data": "`+attachmentBData+`"}}}`))
2356
2357 rt.WaitForVersion(doc1ID, doc1Version)
2358 rt.WaitForVersion(doc2ID, doc2Version)
2359
2360 collection, ctx := rt.GetSingleTestDatabaseCollection()
2361 _, err := collection.GetDocument(ctx, "doc1", db.DocUnmarshalAll)
2362 require.NoError(t, err)
2363 _, err = collection.GetDocument(ctx, "doc2", db.DocUnmarshalAll)
2364 require.NoError(t, err)
2365
2366 doc1Version = btcRunner.AddRev(btc.id, doc1ID, &doc1Version, []byte(`{"key": "val", "_attachments":{"attachment":{"digest":"sha1-SKk0IV40XSHW37d3H0xpv2+z9Ck=","length":11,"content_type":"","stub":true,"revpos":3}}}`))
2367
2368 rt.WaitForVersion(doc1ID, doc1Version)
2369
2370 doc1, err := collection.GetDocument(ctx, "doc1", db.DocUnmarshalAll)
2371 require.NoError(t, err)
2372
2373 assert.Equal(t, "sha1-SKk0IV40XSHW37d3H0xpv2+z9Ck=", doc1.Attachments()["attachment"].(map[string]interface{})["digest"])
2374
2375 req := rt.SendAdminRequest("GET", "/{{.keyspace}}/doc1/attachment", "")
2376 assert.Equal(t, "attachmentB", string(req.BodyBytes()))
2377 })
2378}
2379
2380// TestPushUnknownAttachmentAsStub sets revpos to an older generation, for an attachment that doesn't exist on the server.
2381// Verifies that getAttachment is triggered, and attachment is properly persisted.

Callers

nothing calls this directly

Calls 15

CloseMethod · 0.95
PutDocMethod · 0.95
WaitForVersionMethod · 0.95
SendAdminRequestMethod · 0.95
NewRestTesterFunction · 0.85
AttachmentsMethod · 0.80
RunMethod · 0.65
CloseMethod · 0.65
GetDocumentMethod · 0.65

Tested by

no test coverage detected