Example #1
0
        public void SetupSSLPort()
        {
            _application.Settings.Logging.Enabled = true;
             _application.Settings.Logging.LogTCPIP = true;
             _application.Settings.Logging.EnableLiveLogging(true);

             var cs = new TcpSocket();
             if (!cs.Connect(250))
            Assert.Fail("Could not connect to SSL server.");

             cs.Disconnect();

             for (int i = 0; i <= 40; i++)
             {
            Assert.IsTrue(i != 40);

            string liveLog = _application.Settings.Logging.LiveLog;
            if (liveLog.Contains("SSL handshake with client failed."))
               break;

            Thread.Sleep(250);
             }

             _application.Settings.Logging.EnableLiveLogging(false);
        }
Example #2
0
        public IMAPSimulator(string username, string password, string mailbox)
        {
            _socket = new TcpSocket();

             Assert.IsTrue(ConnectAndLogon(username, password));
             Assert.IsTrue(SelectFolder(mailbox));
        }
Example #3
0
        public void TestLongLineInIMAPConversation()
        {
            // hMailServer is kind and allows up to 1000000 octets.
             var sb = new StringBuilder();
             for (int i = 0; i < 100000; i++)
             {
            sb.Append("1234567890");
             }

             sb.Append(".com\r\n");

             string command = "A03 NOOP " + sb;

             var socket = new TcpSocket();
             Assert.IsTrue(socket.Connect(143));
             socket.Receive();
             socket.Send(command);

             try
             {
            string response = socket.Receive();
            Assert.IsTrue(response.StartsWith("* BYE"));
             }
             catch (SocketException ex)
             {
            Assert.IsTrue(ex.ErrorCode == 10054);
             }

             socket.Disconnect();
        }
Example #4
0
        public void TestConnection()
        {
            for (int i = 0; i < 2500; i++)
            {
                TcpSocket socket = new TcpSocket();

                Assert.IsTrue(socket.CanConnect(25), i.ToString());
            }
        }
Example #5
0
        public void TestManyTCPIPConnections()
        {
            TestSetup.DeleteCurrentDefaultLog();

             const int count = 1000;

             List<TcpSocket> sockets = new List<TcpSocket>();
             for (int i = 0; i < count; i++)
             {
            TcpSocket socket = new TcpSocket();
            Assert.IsTrue(socket.Connect(25));

            sockets.Add(socket);
             }

             foreach (TcpSocket socket in sockets)
             {
            socket.Disconnect();
             }

             string log = TestSetup.ReadCurrentDefaultLog();
        }
Example #6
0
        public void AuthShouldUpdateLastLogonTime()
        {
            Account account = SingletonProvider<TestSetup>.Instance.AddAccount(_domain, "*****@*****.**", "test");
             DateTime lastLogonTimeBefore = Convert.ToDateTime(account.LastLogonTime);

             Thread.Sleep(1000);
             var sock = new TcpSocket();
             sock.Connect(25);
             Assert.IsTrue(sock.Receive().StartsWith("220"));
             sock.Send("EHLO test.com\r\n");
             Assert.IsTrue(sock.Receive().StartsWith("250"));

             string base64EncodedUsername = EncodeBase64("*****@*****.**");
             sock.Send("AUTH LOGIN " + base64EncodedUsername + "\r\n");
             Assert.IsTrue(sock.Receive().StartsWith("334"));

             sock.Send(EncodeBase64("test") + "\r\n");
             Assert.IsTrue(sock.Receive().StartsWith("235"));

             DateTime lastLogonTimeAfter =
            Convert.ToDateTime(SingletonProvider<TestSetup>.Instance.GetApp().Domains[0].Accounts[0].LastLogonTime);
             Assert.AreNotEqual(lastLogonTimeBefore, lastLogonTimeAfter);
        }
Example #7
0
        public static void AssertClamDRunning()
        {
            Process[] processlist = Process.GetProcesses();

             foreach (Process theprocess in processlist)
             {
            if (theprocess.ProcessName == "clamd")
               return;
             }

             // Check if we can launch it...
             var startInfo = new ProcessStartInfo();
             startInfo.FileName = @"C:\clamav\clamd.exe";
             startInfo.WorkingDirectory = @"C:\Clamav";
             startInfo.Arguments = "--daemon";

             try
             {
            Process.Start(startInfo);

            // Wait for clamav to start up.
            for (int i = 0; i < 10; i++)
            {
               var sock = new TcpSocket();
               if (sock.Connect(3310))
                  return;
               Thread.Sleep(1000);
            }

            Assert.Fail("ClamD process not starting up.");
             }
             catch (Exception)
             {
            Assert.Ignore("Unable to start ClamD process. Is ClamAV installed?");
             }
        }
Example #8
0
        public void TestConnections()
        {
            var oSocket = new TcpSocket();

             // Make sure an IP range exists.
             RemoveIPRanges();
             if (_ipRanges.Count == 0)
            AddIPRange();

             if (!oSocket.CanConnect(25))
            throw new Exception("ERROR: Cannot connect to port 25");
             if (!oSocket.CanConnect(110))
            throw new Exception("ERROR: Cannot connect to port 110");
             if (!oSocket.CanConnect(143))
            throw new Exception("ERROR: Cannot connect to port 143");

             RemoveIPRanges();

             // Now it shouldn't be possible to connect.

             if (oSocket.CanConnect(25))
            throw new Exception("ERROR: Cannot connect to port 25");
             if (oSocket.CanConnect(110))
            throw new Exception("ERROR: Cannot connect to port 110");
             if (oSocket.CanConnect(143))
            throw new Exception("ERROR: Cannot connect to port 143");

             AddIPRange();
             // Now it should be possible to connect again.
             if (!oSocket.CanConnect(25))
            throw new Exception("ERROR: Cannot connect to port 25");
             if (!oSocket.CanConnect(110))
            throw new Exception("ERROR: Cannot connect to port 110");
             if (!oSocket.CanConnect(143))
            throw new Exception("ERROR: Cannot connect to port 143");
        }
 public SMTPClientSimulator(bool useSSL, int port, IPAddress ipaddress)
 {
     _socket = new TcpSocket(useSSL);
      _port = port;
      _ipaddress = ipaddress;
 }
Example #10
0
        public void TestPOP3DownloadOfLargeMessage()
        {
            TestLongSMTPDataSessionIncludingNewline();

            POP3Simulator.AssertMessageCount("*****@*****.**", "test", 1);

            TcpSocket socket = new TcpSocket();
            socket.Connect(110);

            // Receive welcome message.
            socket.Receive();

            socket.Send("USER " + "*****@*****.**" + "\r\n");
            socket.ReadUntil("+OK");

            socket.Send("PASS " + "test" + "\r\n");
            socket.ReadUntil("+OK");

            socket.Send("RETR 1\r\n");

            var endOfResponseSB = new StringBuilder();

            string endOfResponse = "";
            while (endOfResponse.IndexOf("\r\n.\r\n") < 0)
            {
                if (endOfResponse.IndexOf("-ERR no such message") >= 0)
                {
                    socket.Disconnect();
                    Assert.Fail("Nope");
                }

                endOfResponseSB.Append(socket.Receive());

                if (endOfResponseSB.Length > 100)
                   endOfResponseSB.Remove(0, endOfResponseSB.Length - 100);

                endOfResponse = endOfResponseSB.ToString();
            }

            socket.Send("DELE 1\r\n");
            socket.ReadUntil("+OK");

            socket.Send("QUIT\r\n");
            socket.ReadUntil("+OK");

            socket.Disconnect();
        }
Example #11
0
        public void TestLongSMTPDataSessionWithoutNewline()
        {
            long memoryUsage = Shared.GetCurrentMemoryUsage();

            TcpSocket socket = new TcpSocket();
            socket.Connect(25);
            socket.Receive();

            socket.Send("HELO test.com\r\n");
            socket.Receive();

            // Build a large string...
            StringBuilder sb = new StringBuilder();
            sb.Append("A01");
            for (int i = 0; i < 10000; i++)
            {
                sb.Append("01234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890");
            }
            int length = sb.Length;

            socket.Send("MAIL FROM: [email protected]\r\n");
            socket.Receive();
            socket.Send("RCPT TO: [email protected]\r\n");
            socket.Receive();
            socket.Send("DATA\r\n");
            socket.Receive();

            for (int i = 0; i < 1000; i++)
            {
                Shared.AssertLowMemoryUsage(memoryUsage+30);

                try
                {
                    socket.Send(sb.ToString());
                }
                catch (Exception)
                {
                    return;
                }
            }

            socket.Send("\r\n.\r\n");
            string result = socket.Receive();

            Assert.IsTrue(result.StartsWith("554 Too long line was received. Transmission aborted."));

            socket.Send("QUIT\r\n");
            result = socket.Receive();

            socket.Disconnect();
        }
Example #12
0
        public void TestLongSMTPDataSessionIncludingNewline()
        {
            long memoryUsage = Shared.GetCurrentMemoryUsage();

               _application.Settings.MaxMessageSize = 0;

            TcpSocket socket = new TcpSocket();
            socket.Connect(25);
            socket.Receive();

            socket.Send("HELO test.com\r\n");
            socket.Receive();

            // Build a large string...
            StringBuilder sb = new StringBuilder();
            sb.Append("A01");
            for (int i = 0; i < 10000; i++)
            {
                sb.Append("01234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890\r\n");
            }
            int length = sb.Length;

            sb.Append(Environment.NewLine);

            socket.Send("MAIL FROM: [email protected]\r\n");
            socket.Receive();
            socket.Send("RCPT TO: [email protected]\r\n");
            socket.Receive();
            socket.Send("DATA\r\n");
            socket.Receive();

            for (int i = 0; i < 100; i++)
            {
                Shared.AssertLowMemoryUsage(memoryUsage+30);

                try
                {
                    socket.Send(sb.ToString());
                }
                catch (Exception)
                {
                    return;
                }
            }

            socket.Send("\r\n.\r\n");
            string result = socket.Receive();
            Assert.IsTrue(result.StartsWith("250"));

            socket.Send("QUIT\r\n");
            result = socket.Receive();
            socket.Disconnect();

            POP3Simulator.AssertMessageCount(_domain.Accounts[0].Address, "test", 1);
        }
Example #13
0
        public void TestOnClientConnectVBScript()
        {
            Application app = SingletonProvider<TestSetup>.Instance.GetApp();
             Scripting scripting = app.Settings.Scripting;

             string script = "Sub OnClientConnect(oClient) " + Environment.NewLine +
                         " EventLog.Write(\"Port: \" & oClient.Port) " + Environment.NewLine +
                         " EventLog.Write(\"Address: \" & oClient.IPAddress) " + Environment.NewLine +
                         " EventLog.Write(\"Username: \" & oClient.Username) " + Environment.NewLine +
                         "End Sub" + Environment.NewLine + Environment.NewLine;

             File.WriteAllText(scripting.CurrentScriptFile, script);

             scripting.Enabled = true;
             scripting.Reload();

             string eventLogFile = app.Settings.Logging.CurrentEventLog;
             if (File.Exists(eventLogFile))
            File.Delete(eventLogFile);

             var socket = new TcpSocket();
             Assert.IsTrue(socket.CanConnect(25));

             // Check that the message exists
             string message = TestSetup.ReadExistingTextFile(eventLogFile);

             Assert.IsNotEmpty(message);
             Assert.IsTrue(message.Contains("Port: 25"));
             Assert.IsTrue(message.Contains("Address: 127"));
             Assert.IsTrue(message.Contains("Username: \"")); // Should be empty, Username isn't available at this time.
        }
Example #14
0
        public void TestEHLOKeywords()
        {
            Application application = SingletonProvider<TestSetup>.Instance.GetApp();
             Settings settings = _settings;
             settings.HostName = "examplify.com";

             var socket = new TcpSocket();
             Assert.IsTrue(socket.Connect(25));
             string result = socket.Receive();
             socket.Send("EHLO example.com\r\n");
             result = socket.Receive();
             socket.Disconnect();
             Assert.IsTrue(result.Contains("250-" + settings.HostName));
        }
Example #15
0
 public POP3Simulator(IPAddress ipaddress, bool useSSL, int port)
 {
     _socket = new TcpSocket(useSSL);
      _port = port;
      _ipaddress = ipaddress;
 }
Example #16
0
        public void TestSMTPServerAuthLoginUsernameAsThirdParameter()
        {
            _settings.AllowSMTPAuthPlain = true;

             var sock = new TcpSocket();
             sock.Connect(25);
             Assert.IsTrue(sock.Receive().StartsWith("220"));
             sock.Send("EHLO test.com\r\n");
             Assert.IsTrue(sock.Receive().StartsWith("250"));

             string base64EncodedUsername = EncodeBase64(GetUsername());
             sock.Send("AUTH LOGIN " + base64EncodedUsername + "\r\n");
             Assert.IsTrue(sock.Receive().StartsWith("334"));

             sock.Send(EncodeBase64(GetPassword()) + "\r\n");
             Assert.IsTrue(sock.Receive().StartsWith("535"));
             EnsureNoPassword();
        }
Example #17
0
        public void TestLongLineInPOP3Conversation()
        {
            var sb = new StringBuilder();
             for (int i = 0; i < 400; i++)
             {
            sb.Append("1234567890");
             }

             sb.Append(".com");

             string command = "NOOP " + sb;

             var socket = new TcpSocket();
             Assert.IsTrue(socket.Connect(110));
             socket.Receive();
             socket.Send(command + "\r\n");

             string response = socket.Receive();
             Assert.IsFalse(response.StartsWith("+OK"));

             socket.Disconnect();
        }
Example #18
0
 public IMAPSimulator(bool useSSL, int port)
 {
     _socket = new TcpSocket(useSSL);
      _port = port;
 }
Example #19
0
        private void OnAcceptSocket(IAsyncResult asyncResult)
        {
            try
             {
            _socket = null;

            try
            {
               _socket = new TcpSocket(_tcpListener.EndAcceptSocket(asyncResult));
            }
            catch (ObjectDisposedException)
            {
               return;
            }

            _numberOfConnectedClients++;

            HandleClient();
             }
             finally
             {
            DisposeSocket();

            _clientCompleted.Set();
             }
        }
Example #20
0
 public IMAPSimulator()
 {
     _socket = new TcpSocket();
 }
Example #21
0
        public void TestLongSMTPCommand()
        {
            TcpSocket socket = new TcpSocket();
            socket.Connect(25);

            // Build a large string...
            StringBuilder sb = new StringBuilder();
            sb.Append("A01");
            for (int i = 0; i < 1000000; i++)
            {
                sb.Append("01234567890");
            }
            int length = sb.Length;

            sb.Append(Environment.NewLine);

            for (int i = 0; i < 100; i++)
            {
                try
                {
                    socket.Send(sb.ToString());
                }
                catch (Exception)
                {
                    return;
                }
            }

            socket.Send("\r\n");
            string result = socket.Receive();

            socket.Disconnect();
        }
Example #22
0
 private void DisposeSocket()
 {
     if (_socket != null)
      {
     _socket.Dispose();
     _socket = null;
      }
 }
Example #23
0
        public void TestSMTPServerAuthPlain()
        {
            _settings.AllowSMTPAuthPlain = true;

             var sock = new TcpSocket();
             sock.Connect(25);
             Assert.IsTrue(sock.Receive().StartsWith("220"));
             sock.Send("EHLO test.com\r\n");
             Assert.IsTrue(sock.Receive().StartsWith("250"));
             sock.Send("AUTH PLAIN\r\n");
             Assert.IsTrue(sock.Receive().StartsWith("334"));

             string str = "\t" + GetUsername() + "\t" + GetPassword();

             sock.Send(EncodeBase64(str) + "\r\n");
             Assert.IsTrue(sock.Receive().StartsWith("535"));
             EnsureNoPassword();
        }
        public void TestPortInUse()
        {
            Application application = SingletonProvider<TestSetup>.Instance.GetApp();
             application.Stop();

             var sock = new TcpSocket();
             using (var serverSocket = new TcpServer(1, 25))
             {
            serverSocket.StartListen();

            application.Start();

            // make sure it's possible to connect to the non blocked port.

            sock.CanConnect(110);
            sock.CanConnect(143);

            //let this our temp server die.
            sock.CanConnect(25);

            // make sure that hMailServer reported an error during start up because the ports were blocked.
            TestSetup.AssertReportedError();
             }

             // restart hMailServer again. everything is now back to normal.
             application.Stop();

             application.Start();
             sock.CanConnect(25);
        }
Example #25
0
        public void TestSendToTooManyRecipients()
        {
            hMailServer.Accounts accounts = _domain.Accounts;
               hMailServer.Account senderAccount =
                    SingletonProvider<TestSetup>.Instance.AddAccount(accounts, string.Format("*****@*****.**"), "test");

               List<string> recipients = new List<string>();

               TcpSocket sock = new TcpSocket();
               sock.Connect(25);
               string result = sock.ReadUntil("\r\n");
               sock.Send("EHLO test.com\r\n");
               result = sock.ReadUntil("\r\n");
               Assert.IsTrue(result.StartsWith("250"));
               sock.Send("MAIL FROM: [email protected]\r\n");
               result = sock.ReadUntil("\r\n");
               Assert.IsTrue(result.StartsWith("250"));

               Stopwatch watch = new Stopwatch();
               watch.Start();

               for (int i = 0; i < 51000; i++)
               {
              string address = string.Format("test{0}@gmail.com", i);

              sock.Send(string.Format("RCPT TO: <{0}>\r\n", address));

              result = sock.ReadUntil("\r\n");
              if (i < 50000)
              {
                 Assert.IsTrue(result.StartsWith("250"));
              }
              else
              {
                 long perfor = watch.ElapsedMilliseconds;
                 Assert.IsFalse(result.StartsWith("250"));
              }
               }
        }
Example #26
0
 public POP3Simulator()
 {
     _socket = new TcpSocket();
 }