Beispiel #1
0
        public void PullTest()
        {
            ReadResponseMessage readResponse = new ReadResponseMessage();

            readResponse.IsPasswordCorrect    = true;
            readResponse.CurrentServerTimeUtc = new DateTime(2012, 1, 23);
            readResponse.Data = new byte[] { 0xaa, 0xbb };

            MockFolderUnpacker folderUnpacker = new MockFolderUnpacker();

            using (Stream responseStream = ServerResponseToStream(readResponse))
            {
                FilePuller filePuller = new FilePuller(folderUnpacker, "the_r1ght_passw0rd");

                const string destinationFolderExpected = @"c:\pulledfiles\";

                filePuller.Pull(responseStream, destinationFolderExpected);

                Assert.AreEqual(destinationFolderExpected, folderUnpacker.LastDestinationFolder);

                Assert.AreEqual(readResponse.CurrentServerTimeUtc, filePuller.LastPullTime);

                Assert.IsTrue(Util.ArraysEqual <byte>(new byte[] { 0xaa, 0xbb }, folderUnpacker.LastPackedData));
            }
        }
Beispiel #2
0
        private void VerifyPasswordResult(string correctPassword, string suppliedPassword, bool expectPasswordIsCorrect)
        {
            ReadRequestMessage readRequest = new ReadRequestMessage(new DateTime(0), suppliedPassword);

            using (BookmarkableStream clientStream = ClientRequestToStream(readRequest))
            {
                MockNetworkConnection networkConnection  = new MockNetworkConnection(clientStream);
                MockFolderPackager    mockFolderPackager = new MockFolderPackager();
                MockClock             serverClock        = new MockClock(new DateTime(2007, 5, 25, 15, 27, 03));

                RequestListener folderMonitor = new RequestListener(networkConnection, mockFolderPackager, serverClock, @"c:\fakepath\fakedir", correctPassword);
                folderMonitor.ProcessNextRequest();

                clientStream.ResetToBookmark();
                FarmerMessageSerializer deserializer = new FarmerMessageSerializer();
                ReadResponseMessage     readResponse = (ReadResponseMessage)deserializer.Deserialize(clientStream);

                Assert.AreEqual(expectPasswordIsCorrect, readResponse.IsPasswordCorrect);

                if (expectPasswordIsCorrect)
                {
                    Assert.AreEqual(serverClock.GetCurrentTimeUtc(), readResponse.CurrentServerTimeUtc);
                    Assert.IsNotNull(readResponse.Data);
                }
                else
                {
                    Assert.IsNull(readResponse.Data);
                }
            }
        }
Beispiel #3
0
        private Stream ServerResponseToStream(ReadResponseMessage responseMessage)
        {
            ReadingStream           responseStream = new ReadingStream();
            FarmerMessageSerializer serializer     = new FarmerMessageSerializer();

            serializer.Serialize(responseStream, responseMessage);

            responseStream.Seek(0, SeekOrigin.Begin);
            responseStream.StopProcessingWrites();

            return(responseStream);
        }
Beispiel #4
0
        /// <summary>
        /// Reads the values for one or more attributes.
        /// </summary>
        public ReadResponseMessage Read(ReadMessage request)
        {
            try
            {
                lock (m_lock)
                {
                    // verify that the session is still valid.
                    VerifySession(request.RequestHeader, false);

                    // process each attribute.
                    ListOfDataValue      results         = new ListOfDataValue();
                    ListOfDiagnosticInfo diagnosticInfos = new ListOfDiagnosticInfo();

                    for (int ii = 0; ii < request.NodesToRead.Count; ii++)
                    {
                        DataValue      result         = new DataValue();
                        DiagnosticInfo diagnosticInfo = new DiagnosticInfo();

                        m_nodeManager.Read(
                            request.NodesToRead[ii],
                            result,
                            diagnosticInfo);

                        results.Add(result);
                        diagnosticInfos.Add(diagnosticInfo);
                    }

                    // return the response.
                    ReadResponseMessage response = new ReadResponseMessage();

                    response.ResponseHeader  = CreateResponseHeader(request.RequestHeader);
                    response.Results         = results;
                    response.DiagnosticInfos = diagnosticInfos;

                    return(response);
                }
            }
            catch (Exception e)
            {
                throw CreateSoapFault(request.RequestHeader, e);
            }
        }
Beispiel #5
0
        public void InvalidPasswordPullTest()
        {
            ReadResponseMessage serverResponseMessage = new ReadResponseMessage();

            serverResponseMessage.IsPasswordCorrect = false;

            using (Stream responseStream = ServerResponseToStream(serverResponseMessage))
            {
                MockFolderUnpacker folderUnpacker = new MockFolderUnpacker();

                FilePuller filePuller = new FilePuller(folderUnpacker, "the_wr0ng_passw0rd");

                filePuller.Pull(responseStream, @"c:\fakedestination");

                //
                // Verify that client gracefully handles rejected passwords and does not try to download more data
                //

                Assert.IsNull(folderUnpacker.LastDestinationFolder);
                Assert.IsNull(folderUnpacker.LastPackedData);
            }
        }
        //
        // Fetch all the messages in the table
        //
        public ReadResponseMessage fetchAllMessages()
        {
            List <Message>      messages = new List <Message>();
            ReadResponseMessage response;

            try
            {
                List <BsonDocument> documents = col.Find(m => true).ToList();
                foreach (var doc in documents)
                {
                    Message message = MessageMapper.toMessage(doc);
                    messages.Add(message);
                }
                response = new ReadResponseMessage(Status.STATUS.SUCCESS, messages, null);
            }
            catch (MongoWriteException err)
            {
                response = new ReadResponseMessage(Status.STATUS.ERROR, messages, err);
            }

            return(response);
        }
Beispiel #7
0
        public void Pull(Stream serverStream, string destinationFolder)
        {
            ReadRequestMessage readRequest = new ReadRequestMessage(LastPullTime, _serverPassword);

            FarmerMessageSerializer messageSerializer = new FarmerMessageSerializer();

            messageSerializer.Serialize(serverStream, readRequest);

            ReadResponseMessage readResponse = (ReadResponseMessage)messageSerializer.Deserialize(serverStream);

            if (!readResponse.IsPasswordCorrect)
            {
                Console.WriteLine("Error: Incorrect password.");
                return;
            }

            Console.WriteLine("Server check time was {0}", readResponse.CurrentServerTimeUtc.ToLocalTime());
            Console.WriteLine("Read {0}", FormatByteCount(readResponse.Data.Length));

            _folderUnpacker.UnpackFolder(destinationFolder, readResponse.Data);

            LastPullTime = readResponse.CurrentServerTimeUtc;
        }
        //
        // Fetch all messages from a user to a user
        //
        public ReadResponseMessage fetchMessagesFromUserToUser(String fromUser, String toUser)
        {
            List <Message>      messages = new List <Message>();
            ReadResponseMessage response;

            try
            {
                List <BsonDocument> documents = col.Find(m => m["from"] == fromUser && m["to"] == toUser).ToList();
                foreach (var doc in documents)
                {
                    Message message = MessageMapper.toMessage(doc);
                    messages.Add(message);
                }
                response = new ReadResponseMessage(Status.STATUS.SUCCESS, messages, null);
            }
            catch (MongoWriteException err)
            {
                response = new ReadResponseMessage(Status.STATUS.ERROR, messages, err);
            }


            return(response);
        }
Beispiel #9
0
        private void VerifyMonitoring(DateTime startTimestampExpected, byte[] folderDataExpected)
        {
            MockFolderPackager mockFolderPackager = new MockFolderPackager();
            MockClock          serverClock        = new MockClock(new DateTime(2007, 5, 25, 15, 27, 03));

            ReadRequestMessage readRequest = new ReadRequestMessage(startTimestampExpected, CorrectPassword);

            using (BookmarkableStream clientStream = ClientRequestToStream(readRequest))
            {
                MockNetworkConnection networkConnection = new MockNetworkConnection(clientStream);
                RequestListener       folderMonitor     = new RequestListener(networkConnection, mockFolderPackager, serverClock, @"c:\fakepath\fakedir", CorrectPassword);
                folderMonitor.ProcessNextRequest();
                Assert.AreEqual(@"c:\fakepath\fakedir", mockFolderPackager.LastFolderPacked);
                Assert.AreEqual(startTimestampExpected, mockFolderPackager.LastModifiedMinimumRequested);

                clientStream.ResetToBookmark();
                FarmerMessageSerializer deserializer = new FarmerMessageSerializer();
                ReadResponseMessage     response     = (ReadResponseMessage)deserializer.Deserialize(clientStream);

                Assert.AreEqual(serverClock.GetCurrentTimeUtc(), response.CurrentServerTimeUtc);
                Assert.IsTrue(Util.ArraysEqual <byte>(folderDataExpected, response.Data));
            }
        }
Beispiel #10
0
 protected void ProcessImpl(ReadRequestMessage requestMessage, ReadResponseMessage responseMessage)
 {
     responseMessage.CurrentServerTimeUtc = _clock.GetCurrentTimeUtc();
     responseMessage.Data = _folderPackager.PackFolder(_folderPath, requestMessage.LastCheckTimeUtc);
 }
Beispiel #11
0
        //
        // Fetch all the messages in the table
        //
        public ReadResponseMessage fetchAllMessages()
        {
            ReadResponseMessage response = messageDao.fetchAllMessages();

            return(response);
        }
Beispiel #12
0
        //
        // Fetch all messages from a user to a user
        //
        public ReadResponseMessage fetchMessagesFromUserToUser(String fromUser, String toUser)
        {
            ReadResponseMessage response = messageDao.fetchMessagesFromUserToUser(fromUser, toUser);

            return(response);
        }
Beispiel #13
0
        //
        // Retrieve all messages from a user
        //
        public ReadResponseMessage fetchMessagesFromUser(String user)
        {
            ReadResponseMessage response = messageDao.fetchMessagesFromUser(user);

            return(response);
        }
Beispiel #14
0
        //
        // Retrieve all messages belonging to a user
        //
        public ReadResponseMessage fetchUserMessages(String user)
        {
            ReadResponseMessage response = messageDao.fetchUserMessages(user);

            return(response);
        }