예제 #1
0
        public void ShouldAddRouteHandler()
        {
            RouteManager routeManager;

            routeManager = new RouteManager(new RouteParser(), new ResponseSerializer());
            routeManager.AddRouteHandler(new BooksRouteHandler());
        }
예제 #2
0
        public void ShouldFailsToAddRouteHandlerWhenParameterIsNull()
        {
            RouteManager routeManager;

            routeManager = new RouteManager(new RouteParser(), new ResponseSerializer());
            Assert.ThrowsException <ArgumentNullException>(() => routeManager.AddRouteHandler(null));
        }
예제 #3
0
        public void ShouldNotGetResponseIfParameterIsWrongType()
        {
            RouteManager routeManager;

            routeManager = new RouteManager(new RouteParser(), new ResponseSerializer());
            routeManager.AddRouteHandler(new BooksRouteHandler());
            Assert.ThrowsException <InvalidParameterException>(() => routeManager.GetResponse(RESTMethods.GET, "/root/API/Books/t"));
        }
예제 #4
0
        public void ShouldNotGetRouteIfMethodsAreDifferent()
        {
            RouteManager routeManager;

            routeManager = new RouteManager(new RouteParser(), new ResponseSerializer());
            routeManager.AddRouteHandler(new BooksRouteHandler());
            Assert.ThrowsException <RouteNotFoundException>(() => routeManager.GetRoute(RESTMethods.PUT, "/root/API/Authors"));
        }
예제 #5
0
        public void ShouldNotGetRouteIfSegmentIsNotFound()
        {
            RouteManager routeManager;

            routeManager = new RouteManager(new RouteParser(), new ResponseSerializer());
            routeManager.AddRouteHandler(new BooksRouteHandler());
            Assert.ThrowsException <RouteNotFoundException>(() => routeManager.GetRoute(RESTMethods.GET, "/root/API/Authors/5/Test"));
        }
예제 #6
0
        public void ShouldNotGetResponseIfURLIsEmpty()
        {
            RouteManager routeManager;

            routeManager = new RouteManager(new RouteParser(), new ResponseSerializer());
            routeManager.AddRouteHandler(new BooksRouteHandler());
            Assert.ThrowsException <ArgumentNullException>(() => routeManager.GetResponse(RESTMethods.GET, null));
            Assert.ThrowsException <ArgumentNullException>(() => routeManager.GetResponse(RESTMethods.GET, ""));
        }
예제 #7
0
        public void ShouldGetResponseWithoutParameter()
        {
            RouteManager routeManager;
            Response     response;

            routeManager = new RouteManager(new RouteParser(), new ResponseSerializer());
            routeManager.AddRouteHandler(new StatusRouteHandler());
            response = routeManager.GetResponse(RESTMethods.GET, "/root/API/Status");
            Assert.IsNotNull(response);
            Assert.IsTrue(response.Body.Contains("true"));
        }
예제 #8
0
        public void ShouldGetResponseWithNullContent()
        {
            RouteManager routeManager;
            Response     response;

            routeManager = new RouteManager(new RouteParser(), new ResponseSerializer());
            routeManager.AddRouteHandler(new BooksRouteHandler());
            response = routeManager.GetResponse(RESTMethods.GET, "/root/API/GetNull");
            Assert.IsNotNull(response);
            Assert.AreEqual("", response.Body);
        }
예제 #9
0
        public void ShouldGetCustomResponse()
        {
            RouteManager routeManager;
            Response     response;

            routeManager = new RouteManager(new RouteParser(), new ResponseSerializer());
            routeManager.AddRouteHandler(new BooksRouteHandler());
            response = routeManager.GetResponse(RESTMethods.GET, "/root/API/GetCustomResponse");
            Assert.IsNotNull(response);
            Assert.AreEqual(ResponseCodes.Custom, response.ResponseCode);
            Assert.AreEqual("Custom", response.Body);
        }
예제 #10
0
파일: Program.cs 프로젝트: dfgs/RESTLib
        static async Task Main(string[] args)
        {
            RESTClient client;
            string     result;
            Book       book;

            RESTServer    server;
            IRouteManager routeManager;

            routeManager = new RouteManager(new RouteParser(), new ResponseSerializer());
            routeManager.AddRouteHandler(new BooksRouteHandlers());
            server = new RESTServer(new ConsoleLogger(new DefaultLogFormatter()), routeManager, "http://localhost:8734/");

            server.Start();
            Thread.Sleep(1000);

            client = new RESTClient(new HttpConnector(), new ResponseDeserializer());

            /*Console.WriteLine("Trying to query URL");
             * result = await client.GetAsync("http://localhost:8734/root/books/500");
             * Console.WriteLine("Result:");
             * Console.WriteLine(result);*/

            Console.WriteLine("Trying to query URL");
            book = await client.GetAsync <Book>("http://localhost:8734/root/books/500");

            Console.WriteLine("Result:");
            Console.WriteLine(book);

            Console.WriteLine("Trying to query URL");
            book = await client.GetAsync <Book>("http://localhost:8734/root/books?year=2020&author=stephenking");

            Console.WriteLine("Result:");
            Console.WriteLine(book);

            Console.WriteLine("Trying to query URL");
            try
            {
                book = await client.GetAsync <Book>("http://localhost:8734/root/book/500");
            }
            catch (Exception ex)
            {
                Console.WriteLine("Result:");
                Console.WriteLine(ex);
            }


            Console.ReadLine();

            server.Stop();
            Console.ReadLine();
        }
예제 #11
0
        public void ShouldGetRoute()
        {
            RouteManager routeManager;
            Route        route;

            routeManager = new RouteManager(new RouteParser(), new ResponseSerializer());
            routeManager.AddRouteHandler(new BooksRouteHandler());
            route = routeManager.GetRoute(RESTMethods.GET, "/root/API/Authors/5");
            Assert.IsNotNull(route);
            Assert.IsNotNull(route.Binding);
            Assert.IsNotNull(route.Binding.RouteHandler);
            Assert.IsNotNull(route.Binding.MethodInfo);

            Assert.AreEqual("5", route.Get("Id"));
        }
예제 #12
0
        public void ShouldGetRouteWithEncodedParameters()
        {
            RouteManager routeManager;
            Route        route;

            routeManager = new RouteManager(new RouteParser(), new ResponseSerializer());
            routeManager.AddRouteHandler(new BooksRouteHandler());
            route = routeManager.GetRoute(RESTMethods.GET, "/root/API/books?year=1980&author=to%20to");
            Assert.IsNotNull(route);
            Assert.IsNotNull(route.Binding);
            Assert.IsNotNull(route.Binding.RouteHandler);
            Assert.IsNotNull(route.Binding.MethodInfo);

            Assert.AreEqual("1980", route.Get("Year"));
            Assert.AreEqual("to to", route.Get("Author"));
        }
예제 #13
0
파일: Program.cs 프로젝트: dfgs/PIO
        static void Main(string[] args)
        {
            ILogger logger;
            VersionControlModule versionControlModule;
            //ServiceHostModule serviceHostModule;
            //IBotsService service;
            RESTServer    server;
            IRouteManager routeManager;

            IDatabase          database;
            IConnectionFactory connectionFactory;
            ICommandBuilder    commandBuilder;
            IDatabaseCreator   databaseCreator;

            IBotModule          botModule;
            IOrderModule        orderModule;
            IOrderManagerModule orderManagerModule;
            IProduceOrderModule produceOrderModule;
            IHarvestOrderModule harvestOrderModule;
            IBuildOrderModule   buildOrderModule;

            IBotSchedulerModule botSchedulerModule;

            PIOServiceClient client;


            quitEvent = new AutoResetEvent(false);
            Console.CancelKeyPress += new ConsoleCancelEventHandler(Console_CancelKeyPress);

            //logger = new ConsoleLogger(new DefaultLogFormatter());
            logger = new UnicastLogger(IPAddress.Loopback, Properties.Settings.Default.UnicastPort);
            //logger = new FileLogger(new DefaultLogFormatter(), "PIO.Bots.ServerHost.Log");

            databaseCreator   = new SqlDatabaseCreator(Properties.Settings.Default.Server, Properties.Settings.Default.DatabaseName);
            connectionFactory = new SqlConnectionFactory(Properties.Settings.Default.Server, Properties.Settings.Default.DatabaseName);
            commandBuilder    = new SqlCommandBuilder();
            database          = new Database(connectionFactory, commandBuilder);

            versionControlModule = new VersionControlModule(logger, databaseCreator, new BotsVersionControl(database));
            if (!versionControlModule.InitializeDatabase(Properties.Settings.Default.DropDatabase))
            {
                Console.ReadLine();
                return;
            }

            client = new PIOServiceClient(new BasicHttpBinding(), new EndpointAddress($@"http://127.0.0.1:8733/PIO/Service/"));
            client.Open();


            botModule          = new BotModule(logger, database);
            orderModule        = new OrderModule(logger, database);
            produceOrderModule = new ProduceOrderModule(logger, database);
            harvestOrderModule = new HarvestOrderModule(logger, database);
            buildOrderModule   = new BuildOrderModule(logger, database);

            orderManagerModule = new OrderManagerModule(logger, client, orderModule, produceOrderModule, harvestOrderModule, buildOrderModule, 10);

            botSchedulerModule = new BotSchedulerModule(logger, client, botModule, orderManagerModule, 5);
            botSchedulerModule.Start();

            routeManager = new RouteManager(new RouteParser(), new ResponseSerializer());
            routeManager.AddRouteHandler(new BotRouteHandler(botModule));
            routeManager.AddRouteHandler(new ProduceOrderRouteHandler(produceOrderModule));
            routeManager.AddRouteHandler(new HarvestOrderRouteHandler(harvestOrderModule));
            routeManager.AddRouteHandler(new BuildOrderRouteHandler(buildOrderModule));

            server = new RESTServer(logger, routeManager, "http://127.0.0.1:8734/");

            server.Start();

            WaitHandle.WaitAny(new WaitHandle[] { quitEvent }, -1);

            server.Stop();
            //serviceHostModule.Stop();
            botSchedulerModule.Stop();

            client.Close();
            logger.Dispose();

            Console.CancelKeyPress -= new ConsoleCancelEventHandler(Console_CancelKeyPress);
        }