github.com/ravendb/ravendb-go-client@v0.0.0-20240229102137-4474ee7aa0fa/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/ravendb/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 }