예제 #1
0
        public void ProcessMessage_BulkQueryMultipleReturn_Success()
        {
            IProcessMessageStrategy strategy = CreateMySqlProcessStrategyWithMocks(new Mocks.MockDBConnection(new MockMySqlSuccessBehaviour()));

            ProtocolRequest request = new ProtocolRequest
            {
                Action      = "SampleCall",
                Destination = "MYSQL",
                IsBulkQuery = true,
                IPAddress   = "127.0.0.1",
                Type        = Newtonsoft.Json.Linq.JTokenType.Object,
                Data        = "[{'Param1':1},{'Param2':2}]"
            };

            ProtocolResponse response = strategy.Process(request);

            Assert.That(response.Result == true);
            Assert.That(response.Error == "");
            Assert.That(response.Action == "SampleCall");

            Assert.That(response.Data.Count == 2, "BulkQuery should return multiple rows of data", null);
            Assert.That((int)response.Data[0][0] == 1);
            Assert.That((bool)response.Data[0][1] == true);
            Assert.That((string)response.Data[0][2] == "string1");
            Assert.That((double)response.Data[0][3] == 12.25);
            Assert.That((int)response.Data[1][0] == 1);
        }
예제 #2
0
        public void ProcessMessage_SampleCallException_Success()
        {
            IProcessMessageStrategy strategy = CreateMySqlProcessStrategyWithMocks(new Mocks.MockDBConnection(new MockMySqlThrowExceptionBehaviour()));
            ProtocolResponse        response = strategy.Process(CreateMockProtocolRequest("SampleCall", "{'Param1':'Test','Param2':'Hello World <p></p>'}"));

            Assert.That(response.Result == false);
            Assert.That(response.Error == ("Error executing query against MySQL (Action: SampleCall) - A sample exception has occurred"));
            Assert.That(response.Action == "SampleCall");
            Assert.That(response.Data.Count == 0);
        }
예제 #3
0
        public void ProcessMessage_GetServerWithHTMLDescription_Success()
        {
            IProcessMessageStrategy strategy = CreateMySqlProcessStrategyWithMocks(new Mocks.MockDBConnection());
            ProtocolResponse        response = strategy.Process(CreateMockProtocolRequest("GetOrAddServer", "{'ServerName':'Dev Kaukasus Insurgency Server','Version':'6A257BB3-A5EA-4FF7-81D9-B56228BAF1BD','Description':'Hello World <p></p>'}"));

            Assert.That(response.Result == true);
            Assert.That(response.Error == "");
            Assert.That(response.Action == "GetOrAddServer");
            Assert.That((int)response.Data[0][0] == 1);
        }
예제 #4
0
        public void ProcessMessage_GetServerNoVersion_Success()
        {
            IProcessMessageStrategy strategy = CreateMySqlProcessStrategyWithMocks(new Mocks.MockDBConnection());
            ProtocolResponse        response = strategy.Process(CreateMockProtocolRequest("GetOrAddServer", "{'ServerName':'Dev Kaukasus Insurgency Server'}"));

            Assert.That(response.Result == false);
            Assert.That(response.Error == "Version mismatch - you are running an older version of KI - the latest version is [0.90] - Please update to the latest version");
            Assert.That(response.Action == "GetOrAddServer");
            Assert.That(response.Data.Count == 0);
        }
예제 #5
0
        public void ProcessMessage_ConnectionOpenCalledTwice_Success()
        {
            IDbConnection           conn     = new Mocks.MockDBConnection();
            IProcessMessageStrategy strategy = CreateMySqlProcessStrategyWithMocks(conn);

            // call twice
            strategy.Process(CreateMockProtocolRequest("SampleCall", "{'Param1':'Test','Param2':'Hello World <p></p>'}"));
            strategy.Process(CreateMockProtocolRequest("SampleCall2", "{'Param1':'Test','Param2':'Hello World <p></p>'}"));

            Assert.That(((Mocks.MockDBConnection)(conn)).OpenCalled == 2);
        }
예제 #6
0
        void IIPCCallback.OnReceive(object sender, IPCReceivedEventArgs e)
        {
            try
            {
                Logger.Log("Client Sent: " + e.data);
                Console.WriteLine("Received data from client (" + ((SocketClient)(sender)).Address + ")");

                dynamic j = Newtonsoft.Json.JsonConvert.DeserializeObject(e.data);

                // Verify the request format is valid
                if (j["Action"] != null && j["BulkQuery"] != null && j["Data"] != null && j["Destination"] != null)
                {
                    string action = j["Action"];
                    // Simply ignore/drop the request if we need to throttle the connection
                    if (!Throttler.ShouldThrottle(action))
                    {
                        // if we have broken connections, send error and return
                        if (!CheckRedisConnection() || !CheckDBConnection())
                        {
                            string jsonResponse = "{ \"Action\" : " + j["Action"] + ", \"Result\" : false, \"Error\" : \"Could not connect to Services\", \"Data\" : null }";
                            ((SocketClient)(sender)).Write(jsonResponse);
                            return;
                        }
                        ProtocolRequest         request   = Utility.CreateRequest(ref j, ((SocketClient)(sender)).Address);
                        IProcessMessageStrategy processor = ProcessMessageStrategyFactory.Create(GlobalConfig.GetConfig(), Logger,
                                                                                                 ProcessMessageStrategyFactory.GetSource(request.Destination), RedisConnection, DBConnection);
                        ProtocolResponse resp     = processor.Process(request);
                        string           jsonResp = JsonConvert.SerializeObject(resp);
                        ((SocketClient)(sender)).Write(jsonResp);
                    }
                    else
                    {
                        Logger.Log("Too many requests - throttling request");
                    }
                }
                else
                {
                    // send malformed request response
                    string jsonResponse = "{ \"Action\" : " + j["Action"] + ", \"Result\" : false, \"Error\" : \"Malformed Request Received\", \"Data\" : null }";
                    ((SocketClient)(sender)).Write(jsonResponse);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Exception encountered during OnReceived handler: " + ex.Message);
                Logger.Log("Exception encountered during OnReceived handler: " + ex.Message);
                string jsonResponse = "{ \"Action\" : \"UNKNOWN\", \"Result\" : false, \"Error\" : \"Malformed JSON Request Received\", \"Data\" : null }";
                ((SocketClient)(sender)).Write(jsonResponse);
            }
        }
예제 #7
0
        public void ProcessMessage_EmptyData_Success()
        {
            IProcessMessageStrategy strategy = CreateMySqlProcessStrategyWithMocks(new Mocks.MockDBConnection());

            ProtocolRequest request = new ProtocolRequest
            {
                Action      = "SampleCall",
                Destination = "MYSQL",
                IsBulkQuery = false,
                IPAddress   = "127.0.0.1",
                Type        = Newtonsoft.Json.Linq.JTokenType.Object,
                Data        = "{}"
            };

            ProtocolResponse response = strategy.Process(request);

            Assert.That(response.Result == true);
            Assert.That(response.Error == "");
            Assert.That(response.Action == "SampleCall");
            Assert.That((int)response.Data[0][0] == 1);
        }
예제 #8
0
        public void ProcessMessage_BulkQueryException_Success()
        {
            IProcessMessageStrategy strategy = CreateMySqlProcessStrategyWithMocks(new Mocks.MockDBConnection(new MockMySqlBulkQueryExceptionBehaviour()));

            ProtocolRequest request = new ProtocolRequest
            {
                Action      = "SampleCall",
                Destination = "MYSQL",
                IsBulkQuery = true,
                IPAddress   = "127.0.0.1",
                Type        = Newtonsoft.Json.Linq.JTokenType.Object,
                Data        = "[{'Param1':1},{'Param2':2}]"
            };

            ProtocolResponse response = strategy.Process(request);

            Assert.That(response.Result == false);
            Assert.That(response.Error == "Error executing query against MySQL (Action: " + request.Action + ") - A sample bulk query exception has occurred");
            Assert.That(response.Action == "SampleCall");
            Assert.That(response.Data.Count == 1);
        }