public void SerializerTest()
        {
            ValuatedStock stock = new ValuatedStock
            {
                Close  = 1.0F,
                Open   = 1.1F,
                High   = 1.2F,
                Low    = 1.3F,
                Volume = 2,
                Symbol = "GOOGL",
                Name   = "GOOGLE"
            };

            var request1 = new TransactionRequestMessage(2, stock);

            var serializedMessage   = request1.Encode();
            var deserializedMessage = MessageFactory.GetMessage(serializedMessage, false) as TransactionRequestMessage;

            Assert.AreEqual(request1.Quantity, deserializedMessage.Quantity);
            Assert.AreEqual(request1.StockValue.Close, deserializedMessage.StockValue.Close);
            Assert.AreEqual(request1.StockValue.Open, deserializedMessage.StockValue.Open);
            Assert.AreEqual(request1.StockValue.High, deserializedMessage.StockValue.High);
            Assert.AreEqual(request1.StockValue.Low, deserializedMessage.StockValue.Low);
            Assert.AreEqual(request1.StockValue.Volume, deserializedMessage.StockValue.Volume);
            Assert.AreEqual(request1.StockValue.Symbol, deserializedMessage.StockValue.Symbol);
            Assert.AreEqual(request1.StockValue.Name, deserializedMessage.StockValue.Name);
        }
Example #2
0
        public void SerializerTest()
        {
            var stock1 = new ValuatedStock();
            var stock2 = new ValuatedStock();

            ValuatedStock[] stocks = { stock1, stock2 };
            string          date1  = "1990-02-20";

            MarketDay day1 = new MarketDay(date1, stocks);

            var recentHistory = new MarketSegment
            {
                day1
            };

            var stockStreamResponse = new StockHistoryResponseMessage
            {
                RecentHistory = recentHistory
            };

            var serializedMessage   = stockStreamResponse.Encode();
            var deserializedMessage = MessageFactory.GetMessage(serializedMessage, false) as StockHistoryResponseMessage;

            Assert.AreEqual(stockStreamResponse.RecentHistory[0].TradedCompanies.Count, deserializedMessage.RecentHistory[0].TradedCompanies.Count);
            Assert.AreEqual(stockStreamResponse.RecentHistory[0].TradedCompanies[0].Close, deserializedMessage.RecentHistory[0].TradedCompanies[0].Close);
            Assert.AreEqual(stockStreamResponse.RecentHistory[0].Date, deserializedMessage.RecentHistory[0].Date);
        }
        public void InitializerTest()
        {
            var stock = new ValuatedStock
            {
                Close  = 1.0F,
                Open   = 1.1F,
                High   = 1.2F,
                Low    = 1.3F,
                Volume = 2,
                Symbol = "GOOGL",
                Name   = "GOOGLE"
            };

            var transactionRequest = new TransactionRequestMessage
            {
                Quantity   = 2,
                StockValue = stock
            };

            Assert.AreEqual(transactionRequest.Quantity, 2);
            Assert.AreEqual(transactionRequest.StockValue.Close, 1.0F);
            Assert.AreEqual(transactionRequest.StockValue.Open, 1.1F);
            Assert.AreEqual(transactionRequest.StockValue.High, 1.2F);
            Assert.AreEqual(transactionRequest.StockValue.Low, 1.3F);
            Assert.AreEqual(transactionRequest.StockValue.Volume, 2);
            Assert.AreEqual(transactionRequest.StockValue.Symbol, "GOOGL");
            Assert.AreEqual(transactionRequest.StockValue.Name, "GOOGLE");
        }
Example #4
0
        public void InitializerTest()
        {
            var stock1 = new ValuatedStock();
            var stock2 = new ValuatedStock();

            ValuatedStock[] stocks = { stock1, stock2 };
            string          date1  = "1990-02-20";
            string          date2  = "1990-03-20";

            MarketDay day1 = new MarketDay(date1, stocks);
            MarketDay day2 = new MarketDay(date2, stocks);//not important that has same valuated stocks

            var recentHistory = new MarketSegment
            {
                day1,
                day2
            };

            var stockStreamResponse = new StockHistoryResponseMessage
            {
                RecentHistory = recentHistory
            };

            Assert.AreEqual(stockStreamResponse.RecentHistory[0].Date, date1);
            Assert.AreEqual(stockStreamResponse.RecentHistory[1].Date, date2);
            Assert.AreEqual(stockStreamResponse.RecentHistory.Count, 2);
            Assert.AreEqual(3, stockStreamResponse.RecentHistory[0].TradedCompanies.Count);
            Assert.AreEqual(3, stockStreamResponse.RecentHistory[1].TradedCompanies.Count);
        }
Example #5
0
        public void ValidMarketDaySignatureTest()
        {
            //Prepare
            var stock1 = new ValuatedStock()
            {
                Symbol = "STK1",
                Name   = "Stock 1",
                Open   = 1,
                High   = 2,
                Low    = 3,
                Close  = 4,
                Volume = 5
            };
            var stock2 = new ValuatedStock()
            {
                Symbol = "STK2",
                Name   = "Stock 2",
                Open   = 6,
                High   = 7,
                Low    = 8,
                Close  = 9,
                Volume = 10
            };

            ValuatedStock[] stocks = { stock1, stock2 };

            var    marketDay = new MarketDay("testDay", stocks);
            string signature = SigServe.GetSignature(marketDay);

            var isVerified = SigServe.VerifySignature(marketDay, signature);

            Assert.IsTrue(isVerified);
        }
Example #6
0
        public void SerializationTest()
        {
            //Prepare
            var stock1 = new ValuatedStock()
            {
                Symbol = "STK1",
                Name   = "Stock 1",
                Open   = 1,
                High   = 2,
                Low    = 3,
                Close  = 4,
                Volume = 5
            };
            var stock2 = new ValuatedStock()
            {
                Symbol = "STK2",
                Name   = "Stock 2",
                Open   = 6,
                High   = 7,
                Low    = 8,
                Close  = 9,
                Volume = 10
            };

            ValuatedStock[] stocks    = { stock1, stock2 };
            var             marketDay = new MarketDay("testDay", stocks);

            //Execute
            var serialized            = SigServe.Serialize(marketDay);
            var deserialziedMarketDay = SigServe.Deserialize <MarketDay>(serialized);

            //Assert
            Assert.IsTrue(deserialziedMarketDay.Equals(marketDay));
        }
        public void CopyConstructorTest()
        {
            ValuatedStock stock = new ValuatedStock
            {
                Close  = 1.0F,
                Open   = 1.1F,
                High   = 1.2F,
                Low    = 1.3F,
                Volume = 2,
                Symbol = "GOOGL",
                Name   = "GOOGLE"
            };

            var request1 = new TransactionRequestMessage(2, stock);
            var request2 = new TransactionRequestMessage(request1);

            Assert.AreEqual(request1.Quantity, request1.Quantity);
            Assert.AreEqual(request1.StockValue.Close, request1.StockValue.Close);
            Assert.AreEqual(request1.StockValue.Open, request1.StockValue.Open);
            Assert.AreEqual(request1.StockValue.High, request1.StockValue.High);
            Assert.AreEqual(request1.StockValue.Low, request1.StockValue.Low);
            Assert.AreEqual(request1.StockValue.Volume, request1.StockValue.Volume);
            Assert.AreEqual(request1.StockValue.Symbol, request1.StockValue.Symbol);
            Assert.AreEqual(request1.StockValue.Name, request1.StockValue.Name);
        }
Example #8
0
        public RespondTransactionConversation(Envelope e) :  base(e.Contents.ConversationID)
        {
            var reqMessage = e.Contents as TransactionRequestMessage;

            PortfoliId      = reqMessage.PortfolioId;
            VStock          = reqMessage.StockValue;
            Quantity        = reqMessage.Quantity;
            ResponseAddress = e.To;
        }
Example #9
0
        public void RequestSingleTimeoutThenSucceed()
        {
            int processId = 1;
            var testStock = new Stock("TST", "Test Stock");
            var vStock    = new ValuatedStock(("1984-02-22,11.0289,11.0822,10.7222,10.7222,197402").Split(','), testStock);

            var conv     = new StockHistoryRequestConversation(processId);
            int requests = 0;

            //setup mock with response message
            var mock = new Mock <StockHistoryRequestState>(conv)
            {
                CallBase = true
            };

            mock.Setup(st => st.Send())
            .Callback(() =>
            {
                //Pretend message is sent and response comes back, but only after second request...
                if (++requests > 1)
                {
                    var responseMessage = new StockHistoryResponseMessage()
                    {
                        ConversationID = conv.Id,
                        MessageID      = "345-234-56"
                    };
                    var responseEnv = new Envelope(responseMessage);
                    ConversationManager.ProcessIncomingMessage(responseEnv);
                }
            });

            conv.SetInitialState(mock.Object as StockHistoryRequestState);

            Assert.IsTrue(conv.CurrentState is StockHistoryRequestState);
            mock.Verify(state => state.Prepare(), Times.Never);
            mock.Verify(state => state.Send(), Times.Never);
            Assert.IsFalse(ConversationManager.ConversationExists(conv.Id));

            ConversationManager.AddConversation(conv);

            Assert.IsTrue(conv.CurrentState is StockHistoryRequestState);
            mock.Verify(state => state.Prepare(), Times.Once);
            mock.Verify(state => state.Send(), Times.Once);
            mock.Verify(state => state.HandleTimeout(), Times.Never);
            Assert.IsTrue(ConversationManager.ConversationExists(conv.Id));

            Thread.Sleep((int)(Config.GetInt(Config.DEFAULT_TIMEOUT) * 1.5));

            Assert.IsFalse(conv.CurrentState is StockHistoryRequestState);
            Assert.IsTrue(conv.CurrentState is ConversationDoneState);
            mock.Verify(state => state.Prepare(), Times.Once);
            mock.Verify(state => state.Send(), Times.Exactly(2));
            mock.Verify(state => state.HandleTimeout(), Times.Exactly(1));
            Assert.IsTrue(ConversationManager.ConversationExists(conv.Id));
        }
Example #10
0
        public void DefaultConstructorTest()
        {
            var ValuatedStock = new ValuatedStock();

            Assert.AreEqual(ValuatedStock.Close, 0.0F);
            Assert.AreEqual(ValuatedStock.High, 0.0F);
            Assert.AreEqual(ValuatedStock.Low, 0.0F);
            Assert.AreEqual(ValuatedStock.Open, 0.0F);
            Assert.AreEqual(ValuatedStock.Volume, 0);
            Assert.IsNull(ValuatedStock.Name);
            Assert.IsNull(ValuatedStock.Symbol);
        }
Example #11
0
        public void RequestSingleTimeoutThenSucceed()
        {
            int portfolioId = 42;
            var testStock   = new Stock("TST", "Test Stock");
            var vStock      = new ValuatedStock(("1984-02-22,11.0289,11.0822,10.7222,10.7222,197402").Split(','), testStock);

            var conv     = new InitiateTransactionConversation(portfolioId);
            int requests = 0;

            //setup response message and mock
            var mock = new Mock <InitTransactionStartingState>(conv, vStock, 1)
            {
                CallBase = true
            };

            mock.Setup(prep => prep.Prepare()).Verifiable();                           //ensure DoPrepare is called.
            mock.Setup(st => st.OnHandleMessage(It.IsAny <Envelope>(), 0)).CallBase(); //Skip mock's HandleMessage override.
            mock.Setup(st => st.Send())                                                //Pretend message is sent and response comes back...
            .Callback(() => {
                if (++requests > 1)
                {
                    var responseMessage = new PortfolioUpdateMessage()
                    {
                        ConversationID = conv.Id
                    };
                    var responseEnv = new Envelope(responseMessage);
                    ConversationManager.ProcessIncomingMessage(responseEnv);
                }
            }).CallBase().Verifiable();

            //execute test
            conv.SetInitialState(mock.Object as InitTransactionStartingState);

            Assert.IsTrue(conv.CurrentState is InitTransactionStartingState);
            mock.Verify(state => state.Prepare(), Times.Never);
            mock.Verify(state => state.Send(), Times.Never);

            ConversationManager.AddConversation(conv);

            Assert.IsTrue(conv.CurrentState is InitTransactionStartingState);
            mock.Verify(state => state.Prepare(), Times.Once);
            mock.Verify(state => state.Send(), Times.Once);
            mock.Verify(state => state.HandleTimeout(), Times.Never);

            Thread.Sleep((int)(Config.GetInt(Config.DEFAULT_TIMEOUT) * 1.5));

            Assert.IsFalse(conv.CurrentState is InitTransactionStartingState);
            Assert.IsTrue(conv.CurrentState is ConversationDoneState);
            mock.Verify(state => state.Prepare(), Times.Once);
            mock.Verify(state => state.Send(), Times.AtLeast(2));
            mock.Verify(state => state.HandleTimeout(), Times.AtLeast(1));
        }
Example #12
0
        public void LoadedConstructorTest()
        {
            string date   = "1990-02-20";
            var    stock1 = new ValuatedStock();
            var    stock2 = new ValuatedStock();

            ValuatedStock[] stocks = { stock1, stock2 };

            var MarketDay = new MarketDay(date, stocks);

            Assert.AreEqual(3, MarketDay.TradedCompanies.Count);
            Assert.AreEqual(MarketDay.Date, date);
        }
Example #13
0
        public void LoadedConstructorTest()
        {
            var stock = new Stock("GOOGL", "GOOGLE");

            string[] data          = { "yolo", "1.0", "1.1", "1.2", "1.3", "2" };
            var      ValuatedStock = new ValuatedStock(data, stock);

            Assert.AreEqual(ValuatedStock.Open, 1.0F);
            Assert.AreEqual(ValuatedStock.High, 1.1F);
            Assert.AreEqual(ValuatedStock.Low, 1.2F);
            Assert.AreEqual(ValuatedStock.Close, 1.3F);
            Assert.AreEqual(ValuatedStock.Volume, 2);
            Assert.AreEqual(ValuatedStock.Name, "GOOGLE");
            Assert.AreEqual(ValuatedStock.Symbol, "GOOGL");
        }
Example #14
0
        public void LoadKeysTest()
        {
            //Clear keys from other tests
            SignatureService.PublicKey  = null;
            SignatureService.PrivateKey = null;

            Assert.IsNull(SignatureService.PublicKey);
            Assert.IsNull(SignatureService.PrivateKey);

            //Load Keys
            SignatureService.LoadPrivateKey("Team1/StockServer");

            SignatureService.LoadPublicKey("Team1/StockServer");

            //Prepare a MarketDay
            var stock1 = new ValuatedStock()
            {
                Symbol = "STK1",
                Name   = "Stock 1",
                Open   = 1,
                High   = 2,
                Low    = 3,
                Close  = 4,
                Volume = 5
            };
            var stock2 = new ValuatedStock()
            {
                Symbol = "STK2",
                Name   = "Stock 2",
                Open   = 6,
                High   = 7,
                Low    = 8,
                Close  = 9,
                Volume = 10
            };

            ValuatedStock[] stocks = { stock1, stock2 };

            var marketDay = new MarketDay("testDay", stocks);

            //Sign marketDay
            string signature = SigServe.GetSignature(marketDay);

            //Verify signature
            var isVerified = SigServe.VerifySignature(marketDay, signature);

            Assert.IsTrue(isVerified);
        }
Example #15
0
        public void LoadedConstructorTest()
        {
            var stock1 = new ValuatedStock();
            var stock2 = new ValuatedStock();

            ValuatedStock[] stocks = { stock1, stock2 };
            var             date   = "1990-02-20";

            var marketDay        = new MarketDay(date, stocks);
            var stockPriceUpdate = new StockPriceUpdate(marketDay);

            var StocksList = sigServ.Deserialize <MarketDay>(Convert.FromBase64String(stockPriceUpdate.SerializedStockList));

            Assert.AreEqual(3, StocksList.TradedCompanies.Count);
            Assert.AreEqual(StocksList.Date, date);
        }
Example #16
0
        public void RequestSucceedAfterIncomingRetry()
        {
            string RequestConvId    = "5-563";
            string ClientIp         = "192.168.1.31";
            int    ClientPort       = 5682;
            int    RequestQuanitity = 12;

            PortfolioManager.TryToCreate("TestRequestSucceedAfterRetry", "password", out Portfolio portfolio);

            var testStock      = new Stock("TST", "Test Stock");
            var vStock         = new ValuatedStock(("1984-02-22,1,2,3,100,5").Split(','), testStock);
            var RequestMessage = new TransactionRequestMessage(RequestQuanitity, vStock)
            {
                ConversationID = RequestConvId,
                PortfolioId    = portfolio.PortfolioID
            };

            Envelope Request = new Envelope(RequestMessage, ClientIp, ClientPort);

            var localConv = ConversationManager.GetConversation(RequestConvId);

            Assert.IsNull(localConv);
            Assert.IsNull(mock);

            ConversationManager.ProcessIncomingMessage(Request);

            localConv = ConversationManager.GetConversation(RequestConvId);

            Assert.IsNotNull(localConv);
            Assert.IsTrue(localConv.CurrentState is ConversationDoneState);
            mock.Verify(state => state.Prepare(), Times.Once);
            mock.Verify(state => state.Send(), Times.Once);
            mock.Verify(state => state.HandleTimeout(), Times.Never);

            ConversationManager.ProcessIncomingMessage(Request);

            localConv = ConversationManager.GetConversation(RequestConvId);

            Assert.IsNotNull(localConv);
            Assert.IsTrue(localConv.CurrentState is ConversationDoneState);
            mock.Verify(state => state.Prepare(), Times.Once);
            mock.Verify(state => state.Send(), Times.Exactly(2));
            mock.Verify(state => state.HandleTimeout(), Times.Never);

            PortfolioManager.TryToRemove(portfolio.PortfolioID);
        }
Example #17
0
        public void RequestTimeout()
        {
            int processId = 1;
            var testStock = new Stock("TST", "Test Stock");
            var vStock    = new ValuatedStock(("1984-02-22,11.0289,11.0822,10.7222,10.7222,197402").Split(','), testStock);

            var conv = new StockHistoryRequestConversation(processId);

            //setup mock with response message
            var mock = new Mock <StockHistoryRequestState>(conv)
            {
                CallBase = true
            };

            mock.Setup(st => st.Send())
            .Callback(() =>
            {
                //Pretend server isn't there, do nothing...
            });

            conv.SetInitialState(mock.Object as StockHistoryRequestState);

            Assert.IsTrue(conv.CurrentState is StockHistoryRequestState);
            mock.Verify(state => state.Prepare(), Times.Never);
            mock.Verify(state => state.Send(), Times.Never);
            Assert.IsFalse(ConversationManager.ConversationExists(conv.Id));

            ConversationManager.AddConversation(conv);

            Assert.IsTrue(conv.CurrentState is StockHistoryRequestState);
            mock.Verify(state => state.Prepare(), Times.Once);
            mock.Verify(state => state.Send(), Times.Once);
            mock.Verify(state => state.HandleTimeout(), Times.Never);
            Assert.IsTrue(ConversationManager.ConversationExists(conv.Id));

            Thread.Sleep((int)(Config.GetInt(Config.DEFAULT_TIMEOUT) * (Config.GetInt(Config.DEFAULT_RETRY_COUNT) + 1) * 1.2));

            Assert.IsFalse(conv.CurrentState is StockHistoryRequestState);
            Assert.IsTrue(conv.CurrentState is ConversationDoneState);
            mock.Verify(state => state.HandleMessage(It.IsAny <Envelope>()), Times.Never);
            mock.Verify(state => state.Prepare(), Times.Once);
            mock.Verify(state => state.Send(), Times.Exactly(3));
            mock.Verify(state => state.HandleTimeout(), Times.AtLeast(3));
            Assert.IsTrue(ConversationManager.ConversationExists(conv.Id));
        }
Example #18
0
        public void InitializerTest()
        {
            string date   = "1990-02-20";
            var    stock1 = new ValuatedStock();
            var    stock2 = new ValuatedStock();

            ValuatedStock[] stocks = { stock1, stock2 };

            var MarketDay = new MarketDay
            {
                Date = date
            };

            MarketDay.TradedCompanies = stocks.Cast <ValuatedStock>().ToList();

            Assert.AreEqual(3, MarketDay.TradedCompanies.Count);
            Assert.AreEqual(MarketDay.Date, date);
        }
Example #19
0
        public void ValidSignatureTest()
        {
            var key = SignatureService.GenerateKeys(1024);

            SignatureService.PublicKey  = (RsaKeyParameters)(key.Public);
            SignatureService.PrivateKey = (RsaKeyParameters)(key.Private);
            var sigServe = new SignatureService();

            var stock1 = new ValuatedStock();
            var stock2 = new ValuatedStock();

            ValuatedStock[] stocks = { stock1, stock2 };
            var             date   = "1990-02-29";

            var marketDay        = new MarketDay(date, stocks);
            var marketDaySig     = sigServe.GetSignature(marketDay);
            var stockPriceUpdate = new StockPriceUpdate(marketDay)
            {
                StockListSignature = marketDaySig
            };

            var isOriginalValid = sigServe.VerifySignature(marketDay, marketDaySig);

            Assert.IsTrue(isOriginalValid);

            var serializedMessage   = stockPriceUpdate.Encode();
            var deserializedMessage = MessageFactory.GetMessage(serializedMessage, false) as StockPriceUpdate;

            MarketDay deserializedDay = sigServ.Deserialize <MarketDay>(Convert.FromBase64String(deserializedMessage.SerializedStockList));

            var StocksList_original     = sigServ.Deserialize <MarketDay>(Convert.FromBase64String(stockPriceUpdate.SerializedStockList));
            var StocksList_deserialized = sigServ.Deserialize <MarketDay>(Convert.FromBase64String(deserializedMessage.SerializedStockList));

            var isDeserializedValid = sigServe.VerifySignature(StocksList_deserialized, deserializedMessage.StockListSignature);

            Assert.IsTrue(isDeserializedValid);



            Assert.AreEqual(StocksList_original.TradedCompanies.Count, StocksList_deserialized.TradedCompanies.Count);
            Assert.AreEqual(StocksList_original.Date, StocksList_deserialized.Date);
            Assert.IsTrue(sigServe.VerifySignature(StocksList_deserialized, deserializedMessage.StockListSignature));
        }
Example #20
0
        private static ValuatedStock MakeupValuatedStock(string symbol, string name, float previousDayClose)
        {
            var vStock = new ValuatedStock();

            vStock.Name   = name;
            vStock.Symbol = symbol;

            //Make trading look realistic relative to previous day
            var scaler = (int)(previousDayClose * 0.01);

            vStock.Open  = previousDayClose + random.Next(-scaler / 2, scaler);
            vStock.Close = vStock.Open + random.Next(-scaler * 3, scaler * 3);

            vStock.Low  = Math.Min(vStock.Open, vStock.Close) - random.Next(0, scaler * 3);
            vStock.High = Math.Max(vStock.Open, vStock.Close) + random.Next(0, scaler * 3);

            vStock.Volume = (int)Math.Abs(vStock.Open - vStock.Close) * 1000000;

            return(vStock);
        }
Example #21
0
        public void SerializerTest()
        {
            var stock1 = new ValuatedStock();
            var stock2 = new ValuatedStock();

            ValuatedStock[] stocks = { stock1, stock2 };
            var             date   = "1990-02-20";

            var marketDay        = new MarketDay(date, stocks);
            var stockPriceUpdate = new StockPriceUpdate(marketDay);

            var serializedMessage   = stockPriceUpdate.Encode();
            var deserializedMessage = MessageFactory.GetMessage(serializedMessage, false) as StockPriceUpdate;

            var StocksList_original     = sigServ.Deserialize <MarketDay>(Convert.FromBase64String(stockPriceUpdate.SerializedStockList));
            var StocksList_deserialized = sigServ.Deserialize <MarketDay>(Convert.FromBase64String(deserializedMessage.SerializedStockList));

            Assert.AreEqual(StocksList_original.TradedCompanies.Count, StocksList_deserialized.TradedCompanies.Count);
            Assert.AreEqual(StocksList_original.Date, StocksList_deserialized.Date);
        }
Example #22
0
        public void RequestTimeout()
        {
            int portfolioId = 42;
            var testStock   = new Stock("TST", "Test Stock");
            var vStock      = new ValuatedStock(("1984-02-22,11.0289,11.0822,10.7222,10.7222,197402").Split(','), testStock);

            var conv = new InitiateTransactionConversation(portfolioId);

            //setup response message and mock
            var mock = new Mock <InitTransactionStartingState>(conv, vStock, 1)
            {
                CallBase = true
            };

            mock.Setup(prep => prep.Prepare()).Verifiable();                           //ensure DoPrepare is called.
            mock.Setup(st => st.OnHandleMessage(It.IsAny <Envelope>(), 0)).CallBase(); //Skip mock's HandleMessage override.
            mock.Setup(st => st.Send()).CallBase().Verifiable();

            //execute test
            conv.SetInitialState(mock.Object as InitTransactionStartingState);

            Assert.IsTrue(conv.CurrentState is InitTransactionStartingState);
            mock.Verify(state => state.Prepare(), Times.Never);
            mock.Verify(state => state.Send(), Times.Never);

            ConversationManager.AddConversation(conv);

            Assert.IsTrue(conv.CurrentState is InitTransactionStartingState);
            mock.Verify(state => state.Prepare(), Times.Once);
            mock.Verify(state => state.Send(), Times.Once);
            mock.Verify(state => state.HandleTimeout(), Times.Never);

            Thread.Sleep((int)(Config.GetInt(Config.DEFAULT_TIMEOUT) * (Config.GetInt(Config.DEFAULT_RETRY_COUNT) + 1) * 1.1));

            Assert.IsFalse(conv.CurrentState is InitTransactionStartingState);
            Assert.IsTrue(conv.CurrentState is ConversationDoneState);
            mock.Verify(state => state.HandleMessage(It.IsAny <Envelope>()), Times.Never);
            mock.Verify(state => state.Prepare(), Times.Once);
            mock.Verify(state => state.Send(), Times.AtLeast(3));
            mock.Verify(state => state.HandleTimeout(), Times.AtLeast(3));
        }
Example #23
0
        public void InitializerTest()
        {
            var ValuatedStock = new ValuatedStock
            {
                Symbol = "GOOGL",
                Name   = "GOOGLE",
                Open   = 1.0F,
                High   = 1.1F,
                Low    = 1.2F,
                Close  = 1.3F,
                Volume = 2
            };

            Assert.AreEqual(ValuatedStock.Open, 1.0F);
            Assert.AreEqual(ValuatedStock.High, 1.1F);
            Assert.AreEqual(ValuatedStock.Low, 1.2F);
            Assert.AreEqual(ValuatedStock.Close, 1.3F);
            Assert.AreEqual(ValuatedStock.Volume, 2);
            Assert.AreEqual(ValuatedStock.Name, "GOOGLE");
            Assert.AreEqual(ValuatedStock.Symbol, "GOOGL");
        }
Example #24
0
        public void MarketDaySignatureInvalidSigTest()
        {
            //Prepare
            var stock1 = new ValuatedStock()
            {
                Symbol = "STK1",
                Name   = "Stock 1",
                Open   = 1,
                High   = 2,
                Low    = 3,
                Close  = 4,
                Volume = 5
            };
            var stock2 = new ValuatedStock()
            {
                Symbol = "STK2",
                Name   = "Stock 2",
                Open   = 6,
                High   = 7,
                Low    = 8,
                Close  = 9,
                Volume = 10
            };

            ValuatedStock[] stocks = { stock1, stock2 };

            var    marketDay = new MarketDay("testDay", stocks);
            string signature = SigServe.GetSignature(marketDay);


            for (int i = 0; i < 15; i++)
            {
                signature = signature.Replace(signature[i], 'j');
            }

            var isVerified = SigServe.VerifySignature(marketDay, signature);

            Assert.IsFalse(isVerified);
        }
Example #25
0
        public void RequestSucceed()
        {
            int portfolioId = 42;
            var testStock   = new Stock("TST", "Test Stock");
            var vStock      = new ValuatedStock(("1984-02-22,11.0289,11.0822,10.7222,10.7222,197402").Split(','), testStock);

            var conv = new InitiateTransactionConversation(portfolioId);

            //setup response message and mock
            var mock = new Mock <InitTransactionStartingState>(conv, vStock, 1)
            {
                CallBase = true
            };

            mock.Setup(st => st.Send())//Pretend message is sent and response comes back...
            .Callback(() => {
                var responseMessage = new PortfolioUpdateMessage()
                {
                    ConversationID = conv.Id, MessageID = "responseMessageID1234"
                };
                var responseEnv = new Envelope(responseMessage);
                ConversationManager.ProcessIncomingMessage(responseEnv);
            }).CallBase().Verifiable();

            //execute test
            conv.SetInitialState(mock.Object as InitTransactionStartingState);

            Assert.IsTrue(conv.CurrentState is InitTransactionStartingState);
            mock.Verify(state => state.Prepare(), Times.Never);
            mock.Verify(state => state.Send(), Times.Never);

            ConversationManager.AddConversation(conv);

            Assert.IsFalse(conv.CurrentState is InitTransactionStartingState);
            Assert.IsTrue(conv.CurrentState is ConversationDoneState);
            mock.Verify(state => state.Prepare(), Times.Once);
            mock.Verify(state => state.Send(), Times.Once);
        }
Example #26
0
        public void InvalidSignatureTest()
        {
            var key = SignatureService.GenerateKeys(1024);

            SignatureService.PublicKey  = (RsaKeyParameters)(key.Public);
            SignatureService.PrivateKey = (RsaKeyParameters)(key.Private);
            var sigServe = new SignatureService();

            var stock1 = new ValuatedStock();
            var stock2 = new ValuatedStock();

            ValuatedStock[] stocks = { stock1, stock2 };
            var             date   = "1990-02-29";

            var marketDay        = new MarketDay(date, stocks);
            var marketDaySig     = sigServe.GetSignature(marketDay);
            var stockPriceUpdate = new StockPriceUpdate(marketDay)
            {
                StockListSignature = marketDaySig
            };

            var isOriginalValid = sigServe.VerifySignature(marketDay, marketDaySig);

            Assert.IsTrue(isOriginalValid);

            var serializedMessage   = stockPriceUpdate.Encode();
            var deserializedMessage = MessageFactory.GetMessage(serializedMessage, false) as StockPriceUpdate;

            //"currupt" signature
            deserializedMessage.StockListSignature = deserializedMessage.StockListSignature.Replace(deserializedMessage.StockListSignature.Substring(0, 5), "fffff");

            MarketDay deserializedDay = sigServ.Deserialize <MarketDay>(Convert.FromBase64String(deserializedMessage.SerializedStockList));

            var isDeserializedValid = sigServe.VerifySignature(deserializedDay, deserializedMessage.StockListSignature);

            Assert.IsFalse(isDeserializedValid);
        }
        public void LoadedConstructorTest()
        {
            ValuatedStock stock = new ValuatedStock
            {
                Close  = 1.0F,
                Open   = 1.1F,
                High   = 1.2F,
                Low    = 1.3F,
                Volume = 2,
                Symbol = "GOOGL",
                Name   = "GOOGLE"
            };

            var transactionRequest = new TransactionRequestMessage(2, stock);

            Assert.AreEqual(transactionRequest.Quantity, 2);
            Assert.AreEqual(transactionRequest.StockValue.Close, 1.0F);
            Assert.AreEqual(transactionRequest.StockValue.Open, 1.1F);
            Assert.AreEqual(transactionRequest.StockValue.High, 1.2F);
            Assert.AreEqual(transactionRequest.StockValue.Low, 1.3F);
            Assert.AreEqual(transactionRequest.StockValue.Volume, 2);
            Assert.AreEqual(transactionRequest.StockValue.Symbol, "GOOGL");
            Assert.AreEqual(transactionRequest.StockValue.Name, "GOOGLE");
        }
Example #28
0
 public InitTransactionStartingState(Conversation conv, ValuatedStock vStock, float quantity) : base(conv, null)
 {
     Stock    = vStock;
     Quantity = quantity;
 }
Example #29
0
        public void EqualOverrideTest()
        {
            var stock1 = new ValuatedStock()
            {
                Symbol = "STK",
                Name   = "Stock",
                Open   = 6,
                High   = 7,
                Low    = 8,
                Close  = 9,
                Volume = 10
            };

            var stock2 = new ValuatedStock()
            {
                Symbol = "STK",
                Name   = "Stock",
                Open   = 6,
                High   = 7,
                Low    = 8,
                Close  = 9,
                Volume = 10
            };

            //Equals
            Assert.IsTrue(stock1.Equals(stock2));


            //Bad stock symbol
            stock2 = new ValuatedStock()
            {
                Symbol = "STK2BADD",
                Name   = "Stock 2",
                Open   = 6,
                High   = 7,
                Low    = 8,
                Close  = 9,
                Volume = 10
            };
            Assert.IsFalse(stock1.Equals(stock2));

            //Bad stock name
            stock2 = new ValuatedStock()
            {
                Symbol = "STK2",
                Name   = "Stock 2 BADD",
                Open   = 6,
                High   = 7,
                Low    = 8,
                Close  = 9,
                Volume = 10
            };
            Assert.IsFalse(stock1.Equals(stock2));

            //Bad stock open
            stock2 = new ValuatedStock()
            {
                Symbol = "STK2",
                Name   = "Stock 2",
                Open   = 6000,
                High   = 7,
                Low    = 8,
                Close  = 9,
                Volume = 10
            };
            Assert.IsFalse(stock1.Equals(stock2));

            //Bad stock High
            stock2 = new ValuatedStock()
            {
                Symbol = "STK2",
                Name   = "Stock 2",
                Open   = 6,
                High   = 7000,
                Low    = 8,
                Close  = 9,
                Volume = 10
            };
            Assert.IsFalse(stock1.Equals(stock2));

            //Bad stock Low
            stock2 = new ValuatedStock()
            {
                Symbol = "STK2",
                Name   = "Stock 2",
                Open   = 6,
                High   = 7,
                Low    = 8000,
                Close  = 9,
                Volume = 10
            };
            Assert.IsFalse(stock1.Equals(stock2));

            //Bad stock Close
            stock2 = new ValuatedStock()
            {
                Symbol = "STK2",
                Name   = "Stock 2",
                Open   = 6,
                High   = 7,
                Low    = 8,
                Close  = 9000,
                Volume = 10
            };
            Assert.IsFalse(stock1.Equals(stock2));

            //Bad stock Volume
            stock2 = new ValuatedStock()
            {
                Symbol = "STK2",
                Name   = "Stock 2",
                Open   = 6,
                High   = 7,
                Low    = 8,
                Close  = 9,
                Volume = 10000
            };
            Assert.IsFalse(stock1.Equals(stock2));
        }
Example #30
0
        public void EqualsOverrideTest()
        {
            //Prepare day
            var stock1 = new ValuatedStock()
            {
                Symbol = "STK1",
                Name   = "Stock 1",
                Open   = 1,
                High   = 2,
                Low    = 3,
                Close  = 4,
                Volume = 5
            };
            var stock2 = new ValuatedStock()
            {
                Symbol = "STK2",
                Name   = "Stock 2",
                Open   = 6,
                High   = 7,
                Low    = 8,
                Close  = 9,
                Volume = 10
            };

            ValuatedStock[] stocks    = { stock1, stock2 };
            var             marketDay = new MarketDay("testDay", stocks);

            //Prepare day duplicate
            var stock1Dup = new ValuatedStock()
            {
                Symbol = "STK1",
                Name   = "Stock 1",
                Open   = 1,
                High   = 2,
                Low    = 3,
                Close  = 4,
                Volume = 5
            };
            var stock2Dup = new ValuatedStock()
            {
                Symbol = "STK2",
                Name   = "Stock 2",
                Open   = 6,
                High   = 7,
                Low    = 8,
                Close  = 9,
                Volume = 10
            };

            ValuatedStock[] stocksDup    = { stock1Dup, stock2Dup };
            var             marketDayDup = new MarketDay("testDay", stocksDup);

            //Equal
            Assert.IsTrue(marketDay.Equals(marketDayDup));

            //Different date
            marketDayDup = new MarketDay("testDifferentDay", stocksDup);
            Assert.IsFalse(marketDay.Equals(marketDayDup));

            //One missing stock
            stocksDup    = new ValuatedStock[] { stock1Dup };
            marketDayDup = new MarketDay("testDay", stocksDup);
            Assert.IsFalse(marketDay.Equals(marketDayDup));

            //One Extra Stock
            var stock3 = new ValuatedStock()
            {
                Symbol = "STK2",
                Name   = "Stock 2",
                Open   = 60,
                High   = 70,
                Low    = 80,
                Close  = 90,
                Volume = 100
            };

            stocksDup    = new ValuatedStock[] { stock1Dup, stock2Dup, stock3 };
            marketDayDup = new MarketDay("testDay", stocksDup);
            Assert.IsFalse(marketDay.Equals(marketDayDup));
        }