public void TestAcquireLockNormalAfterReleaseLockInOtherThread()
        {
            // Main
            try
            {   // ロック1回目
                NbSsePushReceiveClient.AcquireLock();
                // 解除1回
                NbSsePushReceiveClient.ReleaseLock();
            }
            catch (Exception)
            {
                Assert.Fail("Exception");
            }

            try
            {
                Task.Run(() =>
                {
                    NbSsePushReceiveClient.AcquireLock();
                }).Wait();
            }
            catch (AggregateException)
            {
                Assert.Fail("Exception");
            }
            finally
            {
                NbSsePushReceiveClient.ReleaseLock();
            }
        }
        public void TestAutoRecoveryNormal()
        {
            NbSsePushReceiveClient client = new NbSsePushReceiveClient();

            var res          = new Mock <HttpWebResponse>();
            var responseBody = CreateBody(true, true);
            var response     = new MockRestResponse(HttpStatusCode.OK, responseBody.ToString());

            executor.AddResponse(response);

            // Main
            client.AutoRecovery(HttpStatusCode.Unauthorized, res.Object);

            // Check Request
            CheckRequest();

            // ストレージ内のインスタレーション情報存在チェック
            CheckSaveStorage();

            // Check ReleaseLock
            try
            {
                // AcquireLock()でExceptionが起きないことを確認
                NbSsePushReceiveClient.AcquireLock();
            }
            catch (Exception)
            {
                Assert.Fail("Exception");
            }

            NbSsePushReceiveClient.ReleaseLock();
        }
        public void TestReleaseLockExceptionNoSseInfo()
        {
            DeleteStorage();
            // SSE情報なしでストレージに保存
            SaveInstallationToStorage(true, false);

            var res = new Mock <HttpWebResponse>();

            NbSsePushReceiveClient client = new NbSsePushReceiveClient();

            // Main
            Assert.IsFalse(client.AutoRecovery(HttpStatusCode.Unauthorized, res.Object));

            // Check ReleaseLock
            try
            {
                // AcquireLock()でExceptionが起きないことを確認
                NbSsePushReceiveClient.AcquireLock();
            }
            catch (Exception)
            {
                Assert.Fail("Exception");
            }

            NbSsePushReceiveClient.ReleaseLock();
        }
        public void TestConstructorNormal()
        {
            // Main
            NbSsePushReceiveClient client = new NbSsePushReceiveClient();

            // Check State
            Assert.AreEqual(client._clientState, NbSsePushReceiveClient.State.Idle);
        }
Beispiel #5
0
 public void TearDown()
 {
     if (_client != null)
     {
         NbSsePushReceiveClient.ReleaseLock();
         _client.Disconnect();
         _client._sseClient = null;
         _client            = null;
     }
 }
        public void TestConnectNormal()
        {
            NbSsePushReceiveClient client = new NbSsePushReceiveClient();

            // Main
            client.Connect();

            // Check State
            Assert.AreEqual(client._clientState, NbSsePushReceiveClient.State.Connect);
        }
 public void TestReleaseLockNormalWithoutAcquire()
 {
     try
     {
         // Main
         NbSsePushReceiveClient.ReleaseLock();
     }
     catch (Exception)
     {
         Assert.Fail("Exception");
     }
 }
        public void TestConnecExceptionNoId()
        {
            DeleteStorage();
            // インスタレーションIDなしでストレージに保存
            SaveInstallationToStorage(false, true);

            NbSsePushReceiveClient client = new NbSsePushReceiveClient();

            // Main

            client.Connect();
            Assert.Fail("No Exception");
        }
        public void TestAutoRecoveryExceptionFailLock()
        {
            NbSsePushReceiveClient client = new NbSsePushReceiveClient();

            var res = new Mock <HttpWebResponse>();

            // ロック状態にする
            NbSsePushReceiveClient.AcquireLock();

            // Main
            Assert.IsFalse(client.AutoRecovery(HttpStatusCode.Unauthorized, res.Object));

            NbSsePushReceiveClient.ReleaseLock();
        }
 public void TestAcquireLockNormal()
 {
     // Main
     try
     {
         NbSsePushReceiveClient.AcquireLock();
     }
     catch (Exception)
     {
         Assert.Fail("Exception");
     }
     finally
     {
         // 後始末
         NbSsePushReceiveClient.ReleaseLock();
     }
 }
 public void TestAcquireLockNormalOtherThread()
 {
     try
     {
         Task.Run(() =>
         {
             NbSsePushReceiveClient.AcquireLock();
         }).Wait();
     }
     catch (AggregateException)
     {
         Assert.Fail("Exception");
     }
     finally
     {
         NbSsePushReceiveClient.ReleaseLock();
     }
 }
        public void TestConnecExceptionNoSseInfo()
        {
            DeleteStorage();
            SaveInstallationToStorage(true, false);

            NbSsePushReceiveClient client = new NbSsePushReceiveClient();

            // Main
            try
            {
                client.Connect();
                Assert.Fail("No Exception");
            }
            catch (NbHttpException e)
            {
                Assert.AreEqual(e.StatusCode, HttpStatusCode.BadRequest);
            }
        }
        public void TestConnectExceptionFailer()
        {
            NbSsePushReceiveClient client = new NbSsePushReceiveClient();

            // 接続状態を「接続中」に設定
            client._clientState = NbSsePushReceiveClient.State.Connect;

            // Main
            try
            {
                client.Connect();
                Assert.Fail("No Exception");
            }
            catch (NbHttpException e)
            {
                Assert.AreEqual(e.StatusCode, HttpStatusCode.BadRequest);
            }
        }
Beispiel #14
0
        public async void TestAutoRecoveryCallbackLocked()
        {
            // For Callback Wait Class
            ManualResetEvent manualEvent = new ManualResetEvent(false);

            // Save Installation
            var installation = await ITUtil.UpsertInstallation();

            // Set Invalid Password in order to execute AutoRecovery
            installation.Password = "******";

            _client = new NbSsePushReceiveClient();

            // Set Lock
            NbSsePushReceiveClient.AcquireLock();

            // Register Error Callback
            _client.RegisterOnError((statusCode, errorInfo) =>
            {
                _errorCalledCount++;

                if (statusCode != HttpStatusCode.Unauthorized)
                {
                    SetAssert("Not Unauthorized Error: " + statusCode.ToString());
                }
                manualEvent.Set();
            });

            // Main
            _client.Connect();

            // Wait for OnError Callback with Timeout
            manualEvent.WaitOne(10000);

            // Test中にAssert.Fail()するとmanualEvent.Setが呼ばれずハングするので、最後にAssertionをthrowする
            if (_isAssertionExists)
            {
                ThrowAssert();
            }

            // Error Callback: Once
            Assert.AreEqual(1, _errorCalledCount);
        }
        public void TestAcquireLockException2TimesFromSubThread()
        {
            try
            {   // ロック1回目
                NbSsePushReceiveClient.AcquireLock();
            }
            catch (Exception)
            {
                Assert.Fail("Exception");
            }

            try
            {
                Task.Run(() =>
                {
                    // ロック2回目(他スレッド)
                    NbSsePushReceiveClient.AcquireLock();
                }).Wait();
                Assert.Fail("No Exception");
            }
            catch (AggregateException ae)
            {
                ae.Handle((x) =>
                {
                    if (x is InvalidOperationException)
                    {
                        // OK
                        return(true);
                    }
                    else
                    {
                        Assert.Fail("Invalid Exception");
                        return(false);
                    }
                });
            }
            finally
            {
                NbSsePushReceiveClient.ReleaseLock();
            }
        }
        public void TestAcquireLockException2Times()
        {
            // Main
            try
            {   // 1回目
                NbSsePushReceiveClient.AcquireLock();
                // 2回目
                NbSsePushReceiveClient.AcquireLock();

                Assert.Fail("No Exception");
            }
            catch (InvalidOperationException)
            {
                // OK
            }
            finally
            {
                // 後始末
                NbSsePushReceiveClient.ReleaseLock();
            }
        }
        public void TestReleaseLockNormal()
        {
            NbSsePushReceiveClient.AcquireLock();

            // Main
            NbSsePushReceiveClient.ReleaseLock();

            try
            {
                // AcquireLock()でExceptionが起きないことを確認
                Task.Run(() =>
                {
                    NbSsePushReceiveClient.AcquireLock();
                    NbSsePushReceiveClient.ReleaseLock();
                }).Wait();
            }
            catch (AggregateException)
            {
                Assert.Fail("Exception");
            }
        }
        public void TestReleaseLockNormalOtherThread()
        {
            NbSsePushReceiveClient.AcquireLock();

            // Main
            Task.Run(() =>
            {
                NbSsePushReceiveClient.ReleaseLock();
            }).Wait();

            try
            {
                // ロックできることを確認
                NbSsePushReceiveClient.AcquireLock();
            }
            catch (InvalidOperationException)
            {
                Assert.Fail("Exception");
            }
            finally
            {
                NbSsePushReceiveClient.ReleaseLock();
            }
        }
Beispiel #19
0
        public async void TestAutoRecoveryNormal()
        {
            // For Callback Wait Class
            ManualResetEvent manualEventForOnOpen    = new ManualResetEvent(false);
            ManualResetEvent manualEventForOnMessage = new ManualResetEvent(false);

            // Save Installation
            var installation = await ITUtil.UpsertInstallation();

            // Set Invalid Password
            installation.Password = "******";

            _client = new NbSsePushReceiveClient();

            // Register Message Callback
            _client.RegisterOnMessage("TestEventType", (message) =>
            {
                _messageCalledCount++;
                manualEventForOnMessage.Set();
            });

            // Register Error Callback
            _client.RegisterOnError((statusCode, errorInfo) =>
            {
                _errorCalledCount++;
            });

            // Register Open Callback
            _client.RegisterOnOpen(() =>
            {
                _openCalledCount++;
                manualEventForOnOpen.Set();
            });

            // Register Close Callback
            _client.RegisterOnClose(() =>
            {
                _closeCalledCount++;
            });

            // Main
            _client.Connect();

            // Wait for OnOpen Callback with Timeout
            manualEventForOnOpen.WaitOne(10000);

            // Open Callback: Once
            Assert.AreEqual(1, _openCalledCount);

            // Send Message
            var nebulaPush = new NbPush();

            nebulaPush.Query   = new NbQuery().EqualTo("email", "*****@*****.**");
            nebulaPush.Message = "This is Test.";

            var sse = new NbSseFields();

            sse.EventId          = "TestId";
            sse.EventType        = "TestEventType";
            nebulaPush.SseFields = sse;

            await nebulaPush.SendAsync();

            // Wait for OnMessage Callback with Timeout
            manualEventForOnMessage.WaitOne(10000);

            // Check Callback Count

            // Open Callback: Once
            Assert.AreEqual(1, _openCalledCount);

            // Close Callback: Once
            Assert.AreEqual(1, _closeCalledCount);

            // Error Callback: None
            Assert.AreEqual(0, _errorCalledCount);

            // Message Callback: Once
            Assert.AreEqual(1, _messageCalledCount);

            // Check Installation
            var installationAfterAutoRecovery = NbSsePushInstallation.GetCurrentInstallation();

            ITUtil.CheckCommonResponse(installationAfterAutoRecovery);
            Assert.AreEqual(installation.Channels, installationAfterAutoRecovery.Channels);
            Assert.AreEqual(installation.AllowedSenders, installationAfterAutoRecovery.AllowedSenders);
            Assert.IsNull(installationAfterAutoRecovery.Owner);
            Assert.AreEqual(installation.Options, installationAfterAutoRecovery.Options);

            // Check Storage
            ITUtil.CheckSaveStorage(installationAfterAutoRecovery);
        }
        public void TestRegisterOnMessageExceptionNullCallback()
        {
            NbSsePushReceiveClient client = new NbSsePushReceiveClient();

            client.RegisterOnMessage("message", null);
        }
        public void TestRegisterOnMessageExceptionNullEventType()
        {
            NbSsePushReceiveClient client = new NbSsePushReceiveClient();

            client.RegisterOnMessage(null, msg => { });
        }