github.com/ravendb/ravendb-go-client@v0.0.0-20240229102137-4474ee7aa0fa/tests/document_streaming_test.go (about) 1 package tests 2 3 import ( 4 "io" 5 "testing" 6 7 "github.com/ravendb/ravendb-go-client" 8 "github.com/stretchr/testify/assert" 9 ) 10 11 func documentStreamingCanStreamDocumentsStartingWith(t *testing.T, driver *RavenTestDriver) { 12 var err error 13 store := driver.getDocumentStoreMust(t) 14 defer store.Close() 15 16 { 17 session := openSessionMust(t, store) 18 for i := 0; i < 200; i++ { 19 user := &User{} 20 err = session.Store(user) 21 assert.NoError(t, err) 22 } 23 err = session.SaveChanges() 24 assert.NoError(t, err) 25 session.Close() 26 } 27 28 count := 0 29 { 30 session := openSessionMust(t, store) 31 { 32 args := &ravendb.StartsWithArgs{ 33 StartsWith: "users/", 34 } 35 reader, err := session.Advanced().Stream(args) 36 assert.NoError(t, err) 37 for { 38 var user *User 39 _, err = reader.Next(&user) 40 if err == io.EOF { 41 err = nil 42 break 43 } 44 assert.NoError(t, err) 45 assert.NotNil(t, user) 46 count++ 47 } 48 assert.NoError(t, err) 49 } 50 } 51 assert.Equal(t, count, 200) 52 } 53 54 func documentStreamingStreamWithoutIterationDoesntLeakConnection(t *testing.T, driver *RavenTestDriver) { 55 var err error 56 store := driver.getDocumentStoreMust(t) 57 defer store.Close() 58 59 { 60 session := openSessionMust(t, store) 61 for i := 0; i < 200; i++ { 62 user := &User{} 63 err = session.Store(user) 64 assert.NoError(t, err) 65 } 66 err = session.SaveChanges() 67 assert.NoError(t, err) 68 session.Close() 69 } 70 71 for i := 0; i < 5; i++ { 72 session := openSessionMust(t, store) 73 args := &ravendb.StartsWithArgs{ 74 StartsWith: "users/", 75 } 76 reader, err := session.Advanced().Stream(args) 77 assert.NoError(t, err) 78 // don't iterate 79 reader.Close() 80 } 81 } 82 83 func TestDocumentStreaming(t *testing.T) { 84 driver := createTestDriver(t) 85 destroy := func() { destroyDriver(t, driver) } 86 defer recoverTest(t, destroy) 87 88 // matches order of Java tests 89 documentStreamingCanStreamDocumentsStartingWith(t, driver) 90 documentStreamingStreamWithoutIterationDoesntLeakConnection(t, driver) 91 }