spec/source_sync_spec.rb in rhosync-2.1.11 vs spec/source_sync_spec.rb in rhosync-2.1.12

- old
+ new

@@ -217,17 +217,17 @@ verify_result(@s.docname(:md) => {}, @s.docname(:errors) => {'query-error'=>{'message'=>msg}}) # 1) if retry_limit is set to N - then, first N retries should not update refresh_time @s.read_state.retry_counter.should == 1 @s.read_state.refresh_time.should <= Time.now.to_i - + # try once more and fail again set_test_data('test_db_storage',{},msg,"query error") res = @ss.do_query verify_result(@s.docname(:md) => {}, @s.docname(:errors) => {'query-error'=>{'message'=>msg}}) - + # 2) if retry_limit is set to N and number of retries exceeded it - update refresh_time @s.read_state.retry_counter.should == 0 @s.read_state.refresh_time.should > Time.now.to_i end @@ -239,21 +239,54 @@ verify_result(@s.docname(:md) => {}, @s.docname(:errors) => {'query-error'=>{'message'=>msg}}) # 1) if retry_limit is set to N - then, first N retries should not update refresh_time @s.read_state.retry_counter.should == 1 @s.read_state.refresh_time.should <= Time.now.to_i - + # try once more (with success) expected = {'1'=>@product1,'2'=>@product2} set_test_data('test_db_storage',expected) @ss.do_query verify_result(@s.docname(:md) => expected, @s.docname(:errors) => {}) @s.read_state.retry_counter.should == 0 @s.read_state.refresh_time.should > Time.now.to_i end - + + it "should reset the retry counter if prev_refresh_time was set more than poll_interval secs ago" do + @s.retry_limit = 3 + @s.poll_interval = 2 + msg = "Error during query" + set_test_data('test_db_storage',{},msg,"query error") + res = @ss.do_query + verify_result(@s.docname(:md) => {}, + @s.docname(:errors) => {'query-error'=>{'message'=>msg}}) + # 1) if retry_limit is set to N - then, first N retries should not update refresh_time + @s.read_state.retry_counter.should == 1 + @s.read_state.refresh_time.should <= Time.now.to_i + + # 2) Make another error - results are the same + set_test_data('test_db_storage',{},msg,"query error") + res = @ss.do_query + verify_result(@s.docname(:md) => {}, + @s.docname(:errors) => {'query-error'=>{'message'=>msg}}) + # 1) if retry_limit is set to N - then, first N retries should not update refresh_time + @s.read_state.retry_counter.should == 2 + @s.read_state.refresh_time.should <= Time.now.to_i + + # wait until time interval exprires and prev_refresh_time is too old - + # this should reset the counter on next request with error + # and do not update refresh_time + sleep(3) + set_test_data('test_db_storage',{},msg,"query error") + res = @ss.do_query + verify_result(@s.docname(:md) => {}, + @s.docname(:errors) => {'query-error'=>{'message'=>msg}}) + @s.read_state.retry_counter.should == 1 + @s.read_state.refresh_time.should <= Time.now.to_i + end + it "should do query with exception raised and update refresh time if retry_limit is 0" do @s.retry_limit = 0 msg = "Error during query" set_test_data('test_db_storage',{},msg,"query error") res = @ss.do_query @@ -261,11 +294,11 @@ @s.docname(:errors) => {'query-error'=>{'message'=>msg}}) # if poll_interval is set to 0 - refresh time should be updated @s.read_state.retry_counter.should == 0 @s.read_state.refresh_time.should > Time.now.to_i end - + it "should do query with exception raised and update refresh time if poll_interval == 0" do @s.retry_limit = 1 @s.poll_interval = 0 msg = "Error during query" set_test_data('test_db_storage',{},msg,"query error") @@ -290,9 +323,10 @@ set_state('test_db_storage' => expected) @ss1.process_query verify_result("source:#{@test_app_name}:__shared__:#{@s_fields[:name]}:md" => expected) Store.db.keys("read_state:#{@test_app_name}:__shared__*").sort.should == [ "read_state:#{@test_app_name}:__shared__:SampleAdapter:refresh_time", + "read_state:#{@test_app_name}:__shared__:SampleAdapter:prev_refresh_time", "read_state:#{@test_app_name}:__shared__:SampleAdapter:retry_counter", "read_state:#{@test_app_name}:__shared__:SampleAdapter:rho__id"].sort end end \ No newline at end of file