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

     1  package tests
     2  
     3  import (
     4  	"fmt"
     5  	"reflect"
     6  	"testing"
     7  	"time"
     8  
     9  	ravendb "github.com/altipla-consulting/ravendb-go-client"
    10  	"github.com/stretchr/testify/assert"
    11  )
    12  
    13  func securedSubscriptionsBasic_shouldStreamAllDocumentsAfterSubscriptionCreation(t *testing.T, driver *RavenTestDriver) {
    14  	var err error
    15  	store := driver.getSecuredDocumentStoreMust(t)
    16  	defer store.Close()
    17  
    18  	var users []*User
    19  	{
    20  		session := openSessionMust(t, store)
    21  
    22  		user1 := &User{
    23  			Age: 31,
    24  		}
    25  		err = session.StoreWithID(user1, "users/1")
    26  		assert.NoError(t, err)
    27  		users = append(users, user1)
    28  
    29  		user2 := &User{
    30  			Age: 27,
    31  		}
    32  		err = session.StoreWithID(user2, "users/12")
    33  		assert.NoError(t, err)
    34  		users = append(users, user2)
    35  
    36  		user3 := &User{
    37  			Age: 25,
    38  		}
    39  		err = session.StoreWithID(user3, "users/3")
    40  		assert.NoError(t, err)
    41  		users = append(users, user3)
    42  
    43  		err = session.SaveChanges()
    44  		assert.NoError(t, err)
    45  
    46  		session.Close()
    47  	}
    48  
    49  	id, err := store.Subscriptions().CreateForType(reflect.TypeOf(&User{}), nil, "")
    50  	assert.NoError(t, err)
    51  
    52  	{
    53  		opts := ravendb.NewSubscriptionWorkerOptions(id)
    54  		clazz := reflect.TypeOf(&User{})
    55  		subscription, err := store.Subscriptions().GetSubscriptionWorker(clazz, opts, "")
    56  		assert.NoError(t, err)
    57  
    58  		results := make(chan *ravendb.SubscriptionBatch, 16)
    59  		cb := func(batch *ravendb.SubscriptionBatch) error {
    60  			results <- batch
    61  			return nil
    62  		}
    63  		err = subscription.Run(cb)
    64  		assert.NoError(t, err)
    65  		select {
    66  		case batch := <-results:
    67  			for i, item := range batch.Items {
    68  				userExp := users[i]
    69  				assert.Equal(t, item.ID, userExp.ID)
    70  				var u *User
    71  				err := item.GetResult(&u)
    72  				assert.NoError(t, err)
    73  				assert.Equal(t, u.Age, userExp.Age)
    74  			}
    75  
    76  		case <-time.After(_reasonableWaitTime):
    77  			assert.Fail(t, "timed out waiting for batch")
    78  		}
    79  		err = subscription.Close()
    80  		assert.NoError(t, err)
    81  	}
    82  
    83  }
    84  
    85  func securedSubscriptionsBasic_shouldSendAllNewAndModifiedDocs(t *testing.T, driver *RavenTestDriver) {
    86  	var err error
    87  	store := driver.getSecuredDocumentStoreMust(t)
    88  	defer store.Close()
    89  
    90  	id, err := store.Subscriptions().CreateForType(reflect.TypeOf(&User{}), nil, "")
    91  	assert.NoError(t, err)
    92  
    93  	{
    94  		opts := ravendb.NewSubscriptionWorkerOptions(id)
    95  		clazz := reflect.TypeOf(map[string]interface{}{})
    96  		subscription, err := store.Subscriptions().GetSubscriptionWorker(clazz, opts, "")
    97  		assert.NoError(t, err)
    98  
    99  		results := make(chan *ravendb.SubscriptionBatch, 16)
   100  		cb := func(batch *ravendb.SubscriptionBatch) error {
   101  			results <- batch
   102  			return nil
   103  		}
   104  		err = subscription.Run(cb)
   105  		assert.NoError(t, err)
   106  
   107  		{
   108  			session := openSessionMust(t, store)
   109  
   110  			user := &User{}
   111  			user.setName("James")
   112  			err = session.StoreWithID(user, "users/1")
   113  			assert.NoError(t, err)
   114  
   115  			err = session.SaveChanges()
   116  			assert.NoError(t, err)
   117  
   118  			session.Close()
   119  		}
   120  
   121  		assertNextNameIs := func(results chan *ravendb.SubscriptionBatch, nameExp string) {
   122  			select {
   123  			case batch := <-results:
   124  				assert.Equal(t, len(batch.Items), 1)
   125  				item := batch.Items[0]
   126  
   127  				var m map[string]interface{}
   128  				err := item.GetResult(&m)
   129  				assert.NoError(t, err)
   130  				name := m["name"].(string)
   131  				assert.Equal(t, nameExp, name)
   132  			case <-time.After(_reasonableWaitTime):
   133  				assert.Fail(t, "timed out waiting for batch")
   134  			}
   135  		}
   136  		assertNextNameIs(results, "James")
   137  
   138  		{
   139  			session := openSessionMust(t, store)
   140  
   141  			user := &User{}
   142  			user.setName("Adam")
   143  			err = session.StoreWithID(user, "users/12")
   144  			assert.NoError(t, err)
   145  
   146  			err = session.SaveChanges()
   147  			assert.NoError(t, err)
   148  
   149  			session.Close()
   150  		}
   151  		assertNextNameIs(results, "Adam")
   152  
   153  		//Thread.sleep(15000); // test with sleep - let few heartbeats come to us - commented out for CI
   154  
   155  		{
   156  			session := openSessionMust(t, store)
   157  
   158  			user := &User{}
   159  			user.setName("David")
   160  			err = session.StoreWithID(user, "users/1")
   161  			assert.NoError(t, err)
   162  
   163  			err = session.SaveChanges()
   164  			assert.NoError(t, err)
   165  
   166  			session.Close()
   167  		}
   168  		assertNextNameIs(results, "David")
   169  
   170  		err = subscription.Close()
   171  		assert.NoError(t, err)
   172  	}
   173  }
   174  
   175  func TestSecuredSubscriptionsBasic(t *testing.T) {
   176  
   177  	// self-signing cert on windows is not added as root ca so
   178  	// we can't run https tests
   179  	if isWindows() {
   180  		fmt.Printf("Skipping TestSecuredSubscriptionsBasic on windows\n")
   181  		t.Skip("Skipping TestSecuredSubscriptionsBasic on windows")
   182  		return
   183  	}
   184  
   185  	driver := createTestDriver(t)
   186  	destroy := func() { destroyDriver(t, driver) }
   187  	defer recoverTest(t, destroy)
   188  
   189  	// matches order of Java tests
   190  	securedSubscriptionsBasic_shouldStreamAllDocumentsAfterSubscriptionCreation(t, driver)
   191  	securedSubscriptionsBasic_shouldSendAllNewAndModifiedDocs(t, driver)
   192  }