github.com/altipla-consulting/ravendb-go-client@v0.1.3/tests/document_streaming_test.go (about)

     1  package tests
     2  
     3  import (
     4  	"io"
     5  	"testing"
     6  
     7  	"github.com/altipla-consulting/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  }