github.com/ravendb/ravendb-go-client@v0.0.0-20240229102137-4474ee7aa0fa/tests/aggresive_caching_test.go (about)

     1  package tests
     2  
     3  import (
     4  	"testing"
     5  	"time"
     6  
     7  	ravendb "github.com/ravendb/ravendb-go-client"
     8  	"github.com/stretchr/testify/assert"
     9  )
    10  
    11  func initAggressiveCaching(t *testing.T, driver *RavenTestDriver) *ravendb.DocumentStore {
    12  	var err error
    13  	store := driver.getDocumentStoreMust(t)
    14  	store.DisableAggressiveCaching("")
    15  
    16  	{
    17  		session := openSessionMust(t, store)
    18  		err = session.Store(&User{})
    19  		assert.NoError(t, err)
    20  		err = session.SaveChanges()
    21  		assert.NoError(t, err)
    22  
    23  		session.Close()
    24  	}
    25  
    26  	return store
    27  }
    28  
    29  func aggressiveCachingCanAggressivelyCacheLoads404(t *testing.T, driver *RavenTestDriver) {
    30  	defer disableLogFailedRequests()()
    31  
    32  	store := initAggressiveCaching(t, driver)
    33  	requestExecutor := store.GetRequestExecutor("")
    34  
    35  	oldNumOfRequests := requestExecutor.NumberOfServerRequests.Get()
    36  	for i := 0; i < 5; i++ {
    37  		session := openSessionMust(t, store)
    38  		{
    39  			dur := time.Minute * 5
    40  			cancel, err := session.Advanced().GetDocumentStore().AggressivelyCacheFor(dur)
    41  			assert.NoError(t, err)
    42  			var u *User
    43  			err = session.Load(&u, "users/not-there")
    44  			assert.NoError(t, err)
    45  			cancel()
    46  		}
    47  		session.Close()
    48  	}
    49  
    50  	currNo := requestExecutor.NumberOfServerRequests.Get()
    51  
    52  	assert.Equal(t, currNo, 1+oldNumOfRequests)
    53  	store.Close()
    54  }
    55  
    56  func aggressiveCachingCanAggressivelyCacheLoads(t *testing.T, driver *RavenTestDriver) {
    57  	store := initAggressiveCaching(t, driver)
    58  	requestExecutor := store.GetRequestExecutor("")
    59  
    60  	oldNumOfRequests := requestExecutor.NumberOfServerRequests.Get()
    61  	for i := 0; i < 5; i++ {
    62  		session := openSessionMust(t, store)
    63  		{
    64  			dur := time.Minute * 5
    65  			cancel, err := session.Advanced().GetDocumentStore().AggressivelyCacheFor(dur)
    66  			assert.NoError(t, err)
    67  			var u *User
    68  			err = session.Load(&u, "users/1-A")
    69  			assert.NoError(t, err)
    70  			cancel()
    71  		}
    72  		session.Close()
    73  	}
    74  	currNo := requestExecutor.NumberOfServerRequests.Get()
    75  	assert.Equal(t, currNo, 1+oldNumOfRequests)
    76  }
    77  
    78  func aggressiveCachingCanAggressivelyCacheQueries(t *testing.T, driver *RavenTestDriver) {
    79  	store := initAggressiveCaching(t, driver)
    80  	requestExecutor := store.GetRequestExecutor("")
    81  
    82  	oldNumOfRequests := requestExecutor.NumberOfServerRequests.Get()
    83  	for i := 0; i < 5; i++ {
    84  		session := openSessionMust(t, store)
    85  		{
    86  			dur := time.Minute * 5
    87  			cancel, err := session.Advanced().GetDocumentStore().AggressivelyCacheFor(dur)
    88  			assert.NoError(t, err)
    89  			q := session.QueryCollectionForType(userType)
    90  			var u []*User
    91  			err = q.GetResults(&u)
    92  			assert.NoError(t, err)
    93  
    94  			cancel()
    95  		}
    96  		session.Close()
    97  	}
    98  	currNo := requestExecutor.NumberOfServerRequests.Get()
    99  	assert.Equal(t, currNo, 1+oldNumOfRequests)
   100  }
   101  
   102  func aggressiveCachingWaitForNonStaleResultsIgnoresAggressiveCaching(t *testing.T, driver *RavenTestDriver) {
   103  	store := initAggressiveCaching(t, driver)
   104  	requestExecutor := store.GetRequestExecutor("")
   105  
   106  	oldNumOfRequests := requestExecutor.NumberOfServerRequests.Get()
   107  	for i := 0; i < 5; i++ {
   108  		session := openSessionMust(t, store)
   109  		{
   110  			dur := time.Minute * 5
   111  			cancel, err := session.Advanced().GetDocumentStore().AggressivelyCacheFor(dur)
   112  			assert.NoError(t, err)
   113  			q := session.QueryCollectionForType(userType)
   114  			q = q.WaitForNonStaleResults(0)
   115  			var u []*User
   116  			err = q.GetResults(&u)
   117  			assert.NoError(t, err)
   118  			cancel()
   119  		}
   120  		session.Close()
   121  	}
   122  	currNo := requestExecutor.NumberOfServerRequests.Get()
   123  	assert.NotEqual(t, currNo, 1+oldNumOfRequests)
   124  }
   125  
   126  func TestAggressiveCaching(t *testing.T) {
   127  	driver := createTestDriver(t)
   128  	destroy := func() { destroyDriver(t, driver) }
   129  	defer recoverTest(t, destroy)
   130  
   131  	// matches order of Java tests
   132  	aggressiveCachingCanAggressivelyCacheQueries(t, driver)
   133  	aggressiveCachingWaitForNonStaleResultsIgnoresAggressiveCaching(t, driver)
   134  	aggressiveCachingCanAggressivelyCacheLoads(t, driver)
   135  	aggressiveCachingCanAggressivelyCacheLoads404(t, driver)
   136  }