Example #1
0
        public void DisposedIsPassedOn()
        {
            var innerConnection = new TestConnection();
            var outerConnection = new EncryptingConnection(innerConnection);

            outerConnection.Dispose();
            Assert.IsTrue(innerConnection.Disposed);
        }
Example #2
0
        public void SendMessageEncryptsMessage()
        {
            var    innerConnection  = new TestConnection();
            var    outerConnection  = new EncryptingConnection(innerConnection);
            var    request          = new ServerRequest();
            var    expectedResponse = new Response(request);
            var    actionName       = "DoSomething";
            string iv  = null;
            string key = null;

            innerConnection.SendMessageAction = (a, r) =>
            {
                Response sendResponse = null;
                if (a == "RetrievePublicKey")
                {
                    sendResponse = this.GenerateKeyResponse(r);
                }
                else if (a == "InitialiseSecureConnection")
                {
                    Assert.IsInstanceOf <LoginRequest>(r);
                    sendResponse = this.GenerateConnectioResponse(r as LoginRequest, out iv, out key);
                }
                else if (a == "ProcessSecureRequest")
                {
                    Assert.IsInstanceOf <EncryptedRequest>(r);
                    var actualRequest = r as EncryptedRequest;
                    Assert.AreEqual(actionName, actualRequest.Action);

                    var crypto = new RijndaelManaged();
                    crypto.Key = Convert.FromBase64String(key);
                    crypto.IV  = Convert.FromBase64String(iv);
                    var requestData = DecryptMessage(crypto, actualRequest.EncryptedData);
                    Assert.AreEqual(request.ToString(), requestData);

                    var encryptedResponse = new EncryptedResponse();
                    encryptedResponse.Result        = ResponseResult.Success;
                    encryptedResponse.EncryptedData = EncryptMessage(crypto, expectedResponse.ToString());
                    sendResponse = encryptedResponse;
                }
                else
                {
                    Assert.Fail("Unknown action: " + a);
                }

                return(sendResponse);
            };
            var response = outerConnection.SendMessage(actionName, request);

            Assert.IsNotNull(response);
            Assert.AreEqual(expectedResponse.RequestIdentifier, response.RequestIdentifier);
        }
Example #3
0
        public void PropertiesAreRetrievedFromInnerConnection()
        {
            var innerConnection = new TestConnection
            {
                Type       = "innerTest",
                ServerName = "theServerName",
                Address    = "http://lostintranslation",
                IsBusy     = false
            };
            var outerConnection = new EncryptingConnection(innerConnection);

            Assert.AreEqual(innerConnection.Type, outerConnection.Type);
            Assert.AreEqual(innerConnection.ServerName, outerConnection.ServerName);
            Assert.AreEqual(innerConnection.Address, outerConnection.Address);
            Assert.AreEqual(innerConnection.IsBusy, outerConnection.IsBusy);
            innerConnection.IsBusy = true;
            Assert.AreEqual(innerConnection.IsBusy, outerConnection.IsBusy);
        }
Example #4
0
        public void ConstructorWiresUpEvents()
        {
            var innerConnection       = new TestConnection();
            var outerConnection       = new EncryptingConnection(innerConnection);
            var sendMessageFired      = false;
            var requestSendingFired   = false;
            var responseReceivedFired = false;

            outerConnection.SendMessageCompleted += (o, e) => { sendMessageFired = true; };
            outerConnection.RequestSending       += (o, e) => { requestSendingFired = true; };
            outerConnection.ResponseReceived     += (o, e) => { responseReceivedFired = true; };
            innerConnection.TriggerSendMessageCompleted(null, null, false, null);
            innerConnection.TriggerRequestSending(null, null);
            innerConnection.TriggerResponseReceived(null, null);
            Assert.IsTrue(sendMessageFired);
            Assert.IsTrue(requestSendingFired);
            Assert.IsTrue(responseReceivedFired);
        }