public void PerformanceTest()
        {
            int BACKLOG = 1000;

            // Seed the queue with a backlog.
            CreateTempDirs();
            FileSystemNotificationQueue Q = new FileSystemNotificationQueue
                                                (INBOX_DIR, INPROCESS_DIR, SUCCESS_DIR, FAILURE_DIR);

            for (int i = 0; i < BACKLOG; i++)
            {
                Q.Send(new NotificationQueueMessage(GetRandomId(), GetRandomType(), GetRandomOrderId(), XML));
            }
            // Sleep 30 seconds to make sure the notification files are old enough.
            Thread.Sleep(30000);
            // Run the actual test.
            DateTime StartTime = DateTime.Now;

            for (int i = 0; i < BACKLOG; i++)
            {
                Q.Send(new NotificationQueueMessage(GetRandomId(), GetRandomType(), GetRandomOrderId(), XML));
                NotificationQueueMessage M = Q.Receive();
                Q.ProcessingSucceeded(M);
            }
            TimeSpan Duration = DateTime.Now.Subtract(StartTime);

            Console.WriteLine("Took {0} seconds to catch up with a backlog of {1} messages, while new ones were being added.", Duration.TotalSeconds, BACKLOG);
            Console.WriteLine("Throughput: {0} messages per second.", BACKLOG / Duration.TotalSeconds);
        }
        public void Receive_Failure()
        {
            FileSystemNotificationQueue Q =
                new FileSystemNotificationQueue(INBOX_DIR);

            Q.Receive();
        }
        public void ProcessFiles()
        {
            CreateTempDirs();
            WriteFile(INBOX_DIR, FILENAME1, XML, 40);
            WriteFile(INBOX_DIR, FILENAME2, XML, 50);
            WriteFile(INBOX_DIR, FILENAME3, XML, 60);
            FileSystemNotificationQueue Q = new FileSystemNotificationQueue
                                                (INBOX_DIR, INPROCESS_DIR, SUCCESS_DIR, FAILURE_DIR);

            Assert.AreEqual(3, Q.GetLength());
            NotificationQueueMessage M = Q.Receive();

            Assert.AreEqual("charge-amount-notification", M.Type);
            Assert.AreEqual("345475345", M.OrderId);
            Assert.AreEqual("3rcf-f4wtvgw-gwg5", M.Id);
            Assert.AreEqual(2, Q.GetLength());
            Assert.AreEqual(2, Directory.GetFiles(INBOX_DIR).Length);
            Assert.AreEqual(1, Directory.GetFiles(INPROCESS_DIR).Length);
            Assert.AreEqual(GetFullFileName(INPROCESS_DIR, FILENAME3), Directory.GetFiles(INPROCESS_DIR)[0]);
            Assert.AreEqual(0, Directory.GetFiles(SUCCESS_DIR).Length);
            Assert.AreEqual(0, Directory.GetFiles(FAILURE_DIR).Length);
            Q.ProcessingSucceeded(M);
            Assert.AreEqual(2, Directory.GetFiles(INBOX_DIR).Length);
            Assert.AreEqual(0, Directory.GetFiles(INPROCESS_DIR).Length);
            Assert.AreEqual(1, Directory.GetFiles(SUCCESS_DIR).Length);
            Assert.AreEqual(GetFullFileName(SUCCESS_DIR, FILENAME3), Directory.GetFiles(SUCCESS_DIR)[0]);
            Assert.AreEqual(0, Directory.GetFiles(FAILURE_DIR).Length);
            M = Q.Receive();
            Assert.AreEqual("order-state-change-notification", M.Type);
            Assert.AreEqual("245629824", M.OrderId);
            Assert.AreEqual("345g-3w4f-6yg4", M.Id);
            Assert.AreEqual(1, Q.GetLength());
            Assert.AreEqual(1, Directory.GetFiles(INBOX_DIR).Length);
            Assert.AreEqual(1, Directory.GetFiles(INPROCESS_DIR).Length);
            Assert.AreEqual(GetFullFileName(INPROCESS_DIR, FILENAME2), Directory.GetFiles(INPROCESS_DIR)[0]);
            Assert.AreEqual(1, Directory.GetFiles(SUCCESS_DIR).Length);
            Assert.AreEqual(0, Directory.GetFiles(FAILURE_DIR).Length);
            Q.ProcessingFailed(M);
            Assert.AreEqual(1, Directory.GetFiles(INBOX_DIR).Length);
            Assert.AreEqual(0, Directory.GetFiles(INPROCESS_DIR).Length);
            Assert.AreEqual(1, Directory.GetFiles(SUCCESS_DIR).Length);
            Assert.AreEqual(1, Directory.GetFiles(FAILURE_DIR).Length);
            Assert.AreEqual(GetFullFileName(FAILURE_DIR, FILENAME2), Directory.GetFiles(FAILURE_DIR)[0]);
        }
Beispiel #4
0
        static void Main(string[] args)
        {
            INotificationQueue Q = new FileSystemNotificationQueue(
                GetPathFromConfigFile("InboxDir"),
                GetPathFromConfigFile("InProcessDir"),
                GetPathFromConfigFile("SuccessDir"),
                GetPathFromConfigFile("FailureDir"));

            while (true)
            {
                Console.WriteLine("\nWaiting for the next notification.");
                NotificationQueueMessage M = Q.Receive();
                Console.WriteLine("Processing {0} for order {1}.", M.Type, M.OrderId);
                try {
                    ProcessNotification(M.Type, M.Xml);
                    Q.ProcessingSucceeded(M);
                }
                catch (Exception e) {
                    Console.WriteLine(e.ToString());
                    Q.ProcessingFailed(M);
                }
                Console.WriteLine("{0} notifications in queue.", Q.GetLength());
            }
        }
 public void Receive_Failure()
 {
     FileSystemNotificationQueue Q =
     new FileSystemNotificationQueue(INBOX_DIR);
       Q.Receive();
 }
 public void ProcessFiles()
 {
     CreateTempDirs();
       WriteFile(INBOX_DIR, FILENAME1, XML, 40);
       WriteFile(INBOX_DIR, FILENAME2, XML, 50);
       WriteFile(INBOX_DIR, FILENAME3, XML, 60);
       FileSystemNotificationQueue Q = new FileSystemNotificationQueue
     (INBOX_DIR, INPROCESS_DIR, SUCCESS_DIR, FAILURE_DIR);
       Assert.AreEqual(3, Q.GetLength());
       NotificationQueueMessage M = Q.Receive();
       Assert.AreEqual("charge-amount-notification", M.Type);
       Assert.AreEqual("345475345", M.OrderId);
       Assert.AreEqual("3rcf-f4wtvgw-gwg5", M.Id);
       Assert.AreEqual(2, Q.GetLength());
       Assert.AreEqual(2, Directory.GetFiles(INBOX_DIR).Length);
       Assert.AreEqual(1, Directory.GetFiles(INPROCESS_DIR).Length);
       Assert.AreEqual(GetFullFileName(INPROCESS_DIR, FILENAME3), Directory.GetFiles(INPROCESS_DIR)[0]);
       Assert.AreEqual(0, Directory.GetFiles(SUCCESS_DIR).Length);
       Assert.AreEqual(0, Directory.GetFiles(FAILURE_DIR).Length);
       Q.ProcessingSucceeded(M);
       Assert.AreEqual(2, Directory.GetFiles(INBOX_DIR).Length);
       Assert.AreEqual(0, Directory.GetFiles(INPROCESS_DIR).Length);
       Assert.AreEqual(1, Directory.GetFiles(SUCCESS_DIR).Length);
       Assert.AreEqual(GetFullFileName(SUCCESS_DIR, FILENAME3), Directory.GetFiles(SUCCESS_DIR)[0]);
       Assert.AreEqual(0, Directory.GetFiles(FAILURE_DIR).Length);
       M = Q.Receive();
       Assert.AreEqual("order-state-change-notification", M.Type);
       Assert.AreEqual("245629824", M.OrderId);
       Assert.AreEqual("345g-3w4f-6yg4", M.Id);
       Assert.AreEqual(1, Q.GetLength());
       Assert.AreEqual(1, Directory.GetFiles(INBOX_DIR).Length);
       Assert.AreEqual(1, Directory.GetFiles(INPROCESS_DIR).Length);
       Assert.AreEqual(GetFullFileName(INPROCESS_DIR, FILENAME2), Directory.GetFiles(INPROCESS_DIR)[0]);
       Assert.AreEqual(1, Directory.GetFiles(SUCCESS_DIR).Length);
       Assert.AreEqual(0, Directory.GetFiles(FAILURE_DIR).Length);
       Q.ProcessingFailed(M);
       Assert.AreEqual(1, Directory.GetFiles(INBOX_DIR).Length);
       Assert.AreEqual(0, Directory.GetFiles(INPROCESS_DIR).Length);
       Assert.AreEqual(1, Directory.GetFiles(SUCCESS_DIR).Length);
       Assert.AreEqual(1, Directory.GetFiles(FAILURE_DIR).Length);
       Assert.AreEqual(GetFullFileName(FAILURE_DIR, FILENAME2), Directory.GetFiles(FAILURE_DIR)[0]);
 }
 public void PerformanceTest()
 {
     int BACKLOG = 1000;
       // Seed the queue with a backlog.
       CreateTempDirs();
       FileSystemNotificationQueue Q = new FileSystemNotificationQueue
     (INBOX_DIR, INPROCESS_DIR, SUCCESS_DIR, FAILURE_DIR);
       for (int i = 0; i < BACKLOG; i++) {
     Q.Send(new NotificationQueueMessage(GetRandomId(), GetRandomType(), GetRandomOrderId(), XML));
       }
       // Sleep 30 seconds to make sure the notification files are old enough.
       Thread.Sleep(30000);
       // Run the actual test.
       DateTime StartTime = DateTime.Now;
       for (int i = 0; i < BACKLOG; i++) {
     Q.Send(new NotificationQueueMessage(GetRandomId(), GetRandomType(), GetRandomOrderId(), XML));
     NotificationQueueMessage M = Q.Receive();
     Q.ProcessingSucceeded(M);
       }
       TimeSpan Duration = DateTime.Now.Subtract(StartTime);
       Console.WriteLine("Took {0} seconds to catch up with a backlog of {1} messages, while new ones were being added.", Duration.TotalSeconds, BACKLOG);
       Console.WriteLine("Throughput: {0} messages per second.", BACKLOG / Duration.TotalSeconds);
 }