예제 #1
0
        public void SerializeSolveRequestResponse()
        {
            SolveRequestResponse d = new SolveRequestResponse();
            string xml             = d.SerializeToXML();

            Assert.IsNotNull(xml);
        }
예제 #2
0
        /// <summary>
        /// main CC loop (I dont see a need to unit test it)
        /// </summary>
        public override void Run()
        {
            while (true)
            {
                //this thing will grow on second stage of project:
                core.GetProblem();
                //could be in another thread:
                solvingWatch.Reset();
                log.Debug("Sending problem");
                SolveRequestResponse response = SendProblem();
                ulong problemId = response.Id;
                log.DebugFormat("Response received. Id of the problem in cluster: {0}", problemId);
                solvingWatch.Start();

                SolutionRequest request = new SolutionRequest()
                {
                    Id = problemId
                };

                SolutionsSolution solution = this.WorkProblem(request);
                if (solution == null)
                {
                    log.Debug("Solving timeout. Aborting.");
                    continue;
                }
                else
                {
                    log.DebugFormat("\n*** SOLUTION FOUND ({0}) ***\n", problemId);
                }

                core.PrintSolutionResult(solution);
            }
        }
        public void SendProblemMultipleResponsesExceptionTest()
        {
            var mockcore     = new Mock <ClientNodeProcessingModule>();
            var mockcreator  = new Mock <IMessageArrayCreator>();
            var solveRequest = new SolveRequest()
            {
                ProblemType = "abc"
            };

            Message[] request = new[] { solveRequest };
            mockcreator.Setup(u => u.Create(solveRequest)).Returns(request);
            mockcore.Setup(u => u.GetRequest()).Returns(solveRequest);

            var mockclient   = new Mock <IClusterClient>();
            var shouldReturn = new SolveRequestResponse {
                Id = 222
            };
            var duplicated = new SolveRequestResponse {
                Id = 222
            };
            var responses = new Message[] { shouldReturn, duplicated };

            mockclient.Setup(u => u.SendRequests(request)).Returns(responses);

            var clientNode = new ClientNode(mockclient.Object, mockcore.Object, mockcreator.Object);

            var ret = clientNode.SendProblem();
        }
        public void SendProblemGetResponseTest()
        {
            var mockcore     = new Mock <ClientNodeProcessingModule>();
            var mockcreator  = new Mock <IMessageArrayCreator>();
            var solveRequest = new SolveRequest()
            {
                ProblemType = "abc"
            };

            Message[] request = new[] { solveRequest };
            mockcreator.Setup(u => u.Create(solveRequest)).Returns(request);
            mockcore.Setup(u => u.GetRequest()).Returns(solveRequest);

            var mockclient   = new Mock <IClusterClient>();
            var shouldReturn = new SolveRequestResponse {
                Id = 222
            };
            var responses = new Message[] { new NoOperation(),
                                            shouldReturn };

            mockclient.Setup(u => u.SendRequests(request)).Returns(responses);

            var clientNode = new ClientNode(mockclient.Object, mockcore.Object, mockcreator.Object);

            var ret = clientNode.SendProblem();

            Assert.AreEqual(ret, shouldReturn);
        }
예제 #5
0
        public void DeserializeSolveRequestResponse()
        {
            SolveRequestResponse d = new SolveRequestResponse();
            string xml             = d.SerializeToXML();

            d = (SolveRequestResponse)xml.DeserializeXML();
            Assert.IsNotNull(d);
        }
        private void ResponseSolveRequest(Socket _socket, ulong _problemId)
        {
            SolveRequestResponse solveRequestResponse = new SolveRequestResponse()
            {
                Id = _problemId
            };

            Send(SerializeMessage(solveRequestResponse), _socket);
        }
예제 #7
0
        public void SolveRequestResponseMessageSerializationTest()
        {
            SolveRequestResponse response =
                MessagesFactory.CreateEmptyMessage(MessageType.SolveRequestResponseMessage).Cast <SolveRequestResponse>();

            response.Id = 100;
            string xml = _serializer.ToXmlString(response);
            SolveRequestResponse responseDeserialized = _serializer.FromXmlString(xml).Cast <SolveRequestResponse>();

            Assert.AreEqual(response.Id, responseDeserialized.Id);
        }
        /// <summary>
        /// Register new problem from client
        /// </summary>
        /// <param name="networkAdapter"></param>
        /// <param name="message"></param>
        /// <param name="messageType"></param>
        /// <param name="timeout"></param>        
        public void HandleMessage(ServerNetworkAdapter networkAdapter, string message, MessageType messageType, TimeSpan timeout)
        {
            SolveRequest request = MessageSerialization.Deserialize<SolveRequest>(message);

            if (request == null || request.Data == null)// || !request.ProblemType.ToLower().Contains("dvrp"))
                return;

            DvrpProblem.WaitEvent.WaitOne();
            ulong id = DvrpProblem.CreateProblemID();
            DvrpProblem.ProblemsID.Add(id);
            DvrpProblem.Problems.Add(id, request);
            SolveRequestResponse response = new SolveRequestResponse() { Id = id };
            networkAdapter.Send(response);
            DvrpProblem.WaitEvent.Set();
        }
예제 #9
0
        protected override string ReceivedSolveRequest(SolveRequest solveRequest)
        {
            this.serverQueues.SolveRequests.Enqueue(solveRequest);
            SolveRequestResponse response = new SolveRequestResponse();

            if (solveRequest.IdSpecified)
            {
                response.Id = solveRequest.Id; //TaskIDCounter++;
            }
            else
            {
                response.Id = TaskIDCounter++;
            }
            response.IdSpecified = true;

            if (!this.BackupMode)
            {
                Console.WriteLine("Sending SolveRequestResponse");
            }
            return(response.SerializeToXML());
        }
예제 #10
0
        /// <summary>
        /// sends problem to cluster, returns unique problem id
        /// </summary>
        /// <returns></returns>
        public virtual SolveRequestResponse SendProblem()
        {
            SolveRequest problemRequest = core.GetRequest();

            problemRequest.IdSpecified = false;

            Message[]            requests      = creator.Create(problemRequest);
            Message[]            responses     = this.SendMessages(clusterClient, requests);
            SolveRequestResponse solveResponse = null;

            foreach (var response in responses)
            {
                switch (response.MessageType)
                {
                case MessageType.SolveRequestResponseMessage:
                    log.Debug("SolveRequestResponse acquired: handling");
                    if (solveResponse != null)
                    {
                        throw new Exception("Multiple SolveRequestResponse messages in CC");
                    }
                    solveResponse = response.Cast <SolveRequestResponse>();
                    break;

                case MessageType.NoOperationMessage:
                    log.Debug("NoOperation acquired: updating backups");
                    UpdateBackups(response.Cast <NoOperation>());
                    break;

                default:
                    throw new Exception("Invalid message delivered in CC's sendProblem procedure "
                                        + response.ToString());
                }
            }
            if (solveResponse == null)
            {
                throw new Exception("No solveRequestResponse in CC");
            }

            return(solveResponse);
        }
예제 #11
0
        public void SendAndReceiveGenericMethodForCorrectMessage()
        {
            // arrange
            NetworkAdapterConstructor na = new NetworkAdapterConstructor("localhost", 12345);
            SolveRequestResponse msg, msg_correct;
            msg_correct = new SolveRequestResponse() { Id = 1 };

            // act
            server.Start();

            na.StartConnection();
            na.Send<SolveRequest>(sr, false);

            msg = na.Receive<SolveRequestResponse>(false);
            na.CloseConnection();

            server.Stop();

            // assert
            Assert.IsTrue(true);
            Assert.Equals(msg, msg_correct);
        }
        public void SendProblemInvalidResponseExceptionTest()
        {
            var mockcore     = new Mock <ClientNodeProcessingModule>();
            var mockcreator  = new Mock <IMessageArrayCreator>();
            var solveRequest = new SolveRequest()
            {
                ProblemType = "abc"
            };

            Message[] request = new[] { solveRequest };
            mockcreator.Setup(u => u.Create(solveRequest)).Returns(request);
            mockcore.Setup(u => u.GetRequest()).Returns(solveRequest);

            var mockclient      = new Mock <IClusterClient>();
            var invalidResponse = new DivideProblem();
            var properResponse  = new SolveRequestResponse();
            var responses       = new Message[] { invalidResponse, properResponse };

            mockclient.Setup(u => u.SendRequests(request)).Returns(responses);

            var clientNode = new ClientNode(mockclient.Object, mockcore.Object, mockcreator.Object);

            var ret = clientNode.SendProblem();
        }
예제 #13
0
 protected override string ReceivedSolveRequestResponse(SolveRequestResponse solveRequestResponse)
 {
     Console.WriteLine("\n"+solveRequestResponse.SerializeToXML());
     return null;
 }
예제 #14
0
 protected override string ReceivedSolveRequestResponse(SolveRequestResponse solveRequestResponse)
 {
     Debug.Assert(false, "Should not be here");
     return(null);
 }
예제 #15
0
파일: Node.cs 프로젝트: blathursby/15-en-03
 protected abstract string ReceivedSolveRequestResponse(SolveRequestResponse solveRequestResponse);
예제 #16
0
        protected override string ReceivedSolveRequest(SolveRequest solveRequest)
        {
            this.serverQueues.SolveRequests.Enqueue(solveRequest);
            SolveRequestResponse response = new SolveRequestResponse();

            if(solveRequest.IdSpecified)
                response.Id = solveRequest.Id; //TaskIDCounter++;
            else
                response.Id = TaskIDCounter++;
            response.IdSpecified = true;

            if (!this.BackupMode)
            Console.WriteLine("Sending SolveRequestResponse");
            return response.SerializeToXML();
        }
예제 #17
0
 protected abstract string ReceivedSolveRequestResponse(SolveRequestResponse solveRequestResponse);
예제 #18
0
 protected override string ReceivedSolveRequestResponse(SolveRequestResponse solveRequestResponse)
 {
     Debug.Assert(false, "Should not be here");
     return null;
 }
예제 #19
0
 protected override string ReceivedSolveRequestResponse(SolveRequestResponse solveRequestResponse)
 {
     Console.WriteLine("\n" + solveRequestResponse.SerializeToXML());
     return(null);
 }
 public void SerializeSolveRequestResponse()
 {
     SolveRequestResponse d = new SolveRequestResponse();
     string xml = d.SerializeToXML();
     Assert.IsNotNull(xml);
 }
 public void DeserializeSolveRequestResponse()
 {
     SolveRequestResponse d = new SolveRequestResponse();
     string xml = d.SerializeToXML();
     d = (SolveRequestResponse)xml.DeserializeXML();
     Assert.IsNotNull(d);
 }