public void MergeTest() { var epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); string uniqueName = ((DateTime.UtcNow - epoch).TotalSeconds).ToString(); string uniqueName2 = uniqueName + "_"; UnAuthCredentials.Clear(); AutoResetEvent ars = new AutoResetEvent(false); string failureMessage = string.Empty; CognitoSyncManager sm1 = null; AutoResetEvent mainThreadArs = new AutoResetEvent(false); Amazon.Runtime.Internal.UnityRequestQueue.Instance.ExecuteOnMainThread(() => { sm1 = new CognitoSyncManager(AuthCredentials, TestRunner.RegionEndpoint); mainThreadArs.Set(); }); mainThreadArs.WaitOne(); sm1.WipeData(false); Thread.Sleep(2000); Dataset d = sm1.OpenOrCreateDataset("test"); d.Put(uniqueName, uniqueName); d.OnSyncSuccess += delegate(object s1, SyncSuccessEventArgs e1) { ars.Set(); }; d.OnSyncFailure += delegate(object s, SyncFailureEventArgs e) { failureMessage += string.Format("Not expecting OnSyncFailure Got exception {0}\n", e.Exception.Message); ars.Set(); }; d.OnSyncConflict += (Dataset dataset, List <SyncConflict> syncConflicts) => { failureMessage += "Not expecting OnSyncConflict\n"; return(false); }; d.OnDatasetDeleted += (Dataset dataset) => { failureMessage += "Not expecting OnDatasetDeleted\n"; return(false); }; d.OnDatasetMerged += (Dataset dataset, List <string> datasetNames) => { failureMessage += "Not expecting OnDatasetMerged\n"; return(false); }; d.SynchronizeAsync(new AsyncOptions { ExecuteCallbackOnMainThread = false }); ars.WaitOne(); d.Dispose(); sm1.Dispose(); Utils.AssertStringIsNullOrEmpty(failureMessage); UnAuthCredentials.Clear(); CognitoSyncManager sm2 = null; Amazon.Runtime.Internal.UnityRequestQueue.Instance.ExecuteOnMainThread(() => { sm2 = new CognitoSyncManager(UnAuthCredentials, TestRunner.RegionEndpoint); mainThreadArs.Set(); }); mainThreadArs.WaitOne(); Thread.Sleep(2000); Dataset d2 = sm2.OpenOrCreateDataset("test"); d2.Put(uniqueName2, uniqueName2); d2.OnSyncSuccess += delegate(object s2, SyncSuccessEventArgs e2) { ars.Set(); }; d2.OnSyncFailure += (object sender, SyncFailureEventArgs e) => { failureMessage += string.Format("Not expecting OnSyncFailure Got exception {0}\n", e.Exception.Message); ars.Set(); }; d2.OnSyncConflict += (Dataset dataset, List <SyncConflict> conflicts) => { failureMessage += "Not expecting OnSyncConflict\n"; return(false); }; d2.OnDatasetDeleted += (Dataset dataset) => { failureMessage += "Not expecting OnDatasetDeleted\n"; return(false); }; d2.OnDatasetMerged += (Dataset dataset, List <string> datasetNames) => { failureMessage += "Not expecting OnDatasetMerged\n"; return(false); }; d2.SynchronizeAsync(new AsyncOptions { ExecuteCallbackOnMainThread = false }); ars.WaitOne(); d2.Dispose(); sm2.Dispose(); Utils.AssertStringIsNullOrEmpty(failureMessage); AuthCredentials.Clear(); UnAuthCredentials.Clear(); CognitoSyncManager sm3 = null; Amazon.Runtime.Internal.UnityRequestQueue.Instance.ExecuteOnMainThread(() => { sm3 = new CognitoSyncManager(AuthCredentials, TestRunner.RegionEndpoint); mainThreadArs.Set(); }); mainThreadArs.WaitOne(); Thread.Sleep(2000); Dataset d3 = sm3.OpenOrCreateDataset("test"); bool mergeTriggered = false; d3.OnSyncSuccess += (object sender, SyncSuccessEventArgs e) => { if (!mergeTriggered) { failureMessage += "Expecting DatasetMerged instead of OnSyncSuccess\n"; } ars.Set(); }; d3.OnSyncFailure += (object sender, SyncFailureEventArgs e) => { failureMessage += string.Format("Not expecting OnSyncFailure Got exception {0}\n", e.Exception.Message); ars.Set(); }; d3.OnSyncConflict += (Dataset dataset, List <SyncConflict> syncConflicts) => { failureMessage += "Not expecting OnSyncConflict\n"; return(false); }; d3.OnDatasetDeleted += (Dataset dataset) => { failureMessage += "Not expecting OnDatasetDeleted\n"; return(false); }; d3.OnDatasetMerged += delegate(Dataset ds, List <string> datasetNames) { mergeTriggered = true; return(true); }; d3.SynchronizeAsync(new AsyncOptions { ExecuteCallbackOnMainThread = false }); ars.WaitOne(); Utils.AssertStringIsNullOrEmpty(failureMessage); }
/// <summary> /// Test Case: /// </summary> //[TestMethod] //[TestCategory("SyncManager")] public void MergeTest() { var epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); string uniqueName = ((DateTime.UtcNow - epoch).TotalSeconds).ToString(); string uniqueName2 = uniqueName + "_"; string failureMessage = string.Empty; UnAuthCredentials.Clear(); using (CognitoSyncManager sm1 = new CognitoSyncManager(AuthCredentials)) { sm1.WipeData(false); Thread.Sleep(2000); using (Dataset d = sm1.OpenOrCreateDataset("test")) { d.Put(uniqueName, uniqueName); d.OnSyncSuccess += delegate(object s1, SyncSuccessEventArgs e1) { UnAuthCredentials.Clear(); using (CognitoSyncManager sm2 = new CognitoSyncManager(UnAuthCredentials)) { Thread.Sleep(2000); using (Dataset d2 = sm2.OpenOrCreateDataset("test")) { d2.Put(uniqueName2, uniqueName2); d2.OnSyncSuccess += delegate(object s2, SyncSuccessEventArgs e2) { AuthCredentials.Clear(); UnAuthCredentials.Clear(); //now we will use auth credentials. using (CognitoSyncManager sm3 = new CognitoSyncManager(AuthCredentials)) { Thread.Sleep(2000); using (Dataset d3 = sm3.OpenOrCreateDataset("test")) { bool mergeTriggered = false; d3.OnSyncSuccess += (object sender, SyncSuccessEventArgs e) => { if (!mergeTriggered) { failureMessage += "Expecting DatasetMerged instead of OnSyncSuccess\n"; } }; d3.OnSyncFailure += (object sender, SyncFailureEventArgs e) => { failureMessage += string.Format("Not expecting OnSyncFailure Got exception {0}\n", e.Exception.Message); }; d3.OnSyncConflict += (Dataset dataset, List <SyncConflict> syncConflicts) => { failureMessage += "Not expecting OnSyncConflict\n"; return(false); }; d3.OnDatasetDeleted += (Dataset dataset) => { failureMessage += "Not expecting OnDatasetDeleted\n"; return(false); }; d3.OnDatasetMerged += (Dataset ds, List <string> datasetNames) => { mergeTriggered = true; return(true); }; #if BCL35 d3.Synchronize(); #else RunAsSync(async() => await d3.SynchronizeAsync()); #endif } } }; d2.OnSyncFailure += (object sender, SyncFailureEventArgs e) => { failureMessage += string.Format("Not expecting OnSyncFailure Got exception {0}\n", e.Exception.Message); }; d2.OnSyncConflict += (Dataset dataset, List <SyncConflict> conflicts) => { failureMessage += "Not expecting OnSyncConflict\n"; return(false); }; d2.OnDatasetDeleted += (Dataset dataset) => { failureMessage += "Not expecting OnDatasetDeleted\n"; return(false); }; d2.OnDatasetMerged += (Dataset dataset, List <string> datasetNames) => { failureMessage += "Not expecting OnDatasetMerged\n"; return(false); }; #if BCL35 d2.Synchronize(); #else RunAsSync(async() => await d2.SynchronizeAsync()); #endif } } }; d.OnSyncFailure += delegate(object s, SyncFailureEventArgs e) { failureMessage += string.Format("Not expecting OnSyncFailure Got exception {0}\n", e.Exception.Message); }; d.OnSyncConflict += (Dataset dataset, List <SyncConflict> syncConflicts) => { failureMessage += "Not expecting OnSyncConflict\n"; return(false); }; d.OnDatasetDeleted += (Dataset dataset) => { failureMessage += "Not expecting OnDatasetDeleted\n"; return(false); }; d.OnDatasetMerged += (Dataset dataset, List <string> datasetNames) => { failureMessage += "Not expecting OnDatasetMerged\n"; return(false); }; #if BCL35 d.Synchronize(); #else RunAsSync(async() => await d.SynchronizeAsync()); #endif } } if (!string.IsNullOrEmpty(failureMessage)) { Assert.Fail(failureMessage); } }