예제 #1
0
        public void ForksManager_KeyDeleteTest()
        {
            var store = new StackExchangeRedisKeyValueStore("localhost:6379");

            store.FlushKeys("KVSF*");
            var manager = new ForksManager <StackExchangeRedisKeyValueStore.StackExchangeRedisDataTypesEnum>(store);

            manager.CreateApp(3, "ForkDeleteTest", string.Empty);

            var forkId = manager.CreateFork("test1", "some test fork", 1);

            var wrapper = manager.GetWrapper(forkId);

            wrapper.StringSet(new List <KeyValuePair <string, int> > {
                new KeyValuePair <string, int>("testKey1", 1),
                new KeyValuePair <string, int>("testKey2", 2)
            }.ToArray());

            forkId  = manager.CreateFork("test2", "some test fork", 2);
            wrapper = manager.GetWrapper(forkId);
            wrapper.StringSet("testKey3", 3);
            wrapper.StringSet("testKey2", 4);

            wrapper.KeyDelete(new string[] { "testKey2", "testKey3" });

            var res = wrapper.StringGet <int>(new string[] { "testKey1", "testKey2", "testKey3" });

            Assert.AreEqual(1, res["testKey1"]);
            Assert.AreEqual(1, res.Count);
        }
예제 #2
0
        private static void DisplayForks(ForksManager <StackExchangeRedisKeyValueStore.StackExchangeRedisDataTypesEnum> manager)
        {
            Console.WriteLine("Forks");
            var masterForks = manager.GetMasterForks();

            foreach (var fork in masterForks)
            {
                DisplayFork(fork, 0);
            }

            Console.WriteLine();
        }
예제 #3
0
        public void ForksManager_PruneTest()
        {
            var store = new StackExchangeRedisKeyValueStore("localhost:6379");

            store.FlushKeys("KVSF*");

            var manager = new ForksManager <StackExchangeRedisKeyValueStore.StackExchangeRedisDataTypesEnum>(store);

            manager.CreateApp(3, "test", "some test app");

            var wrapper = manager.GetWrapper(1);

            wrapper.StringSet("1", 1);

            var forkId = manager.CreateFork("test2", "some test fork", 1);

            wrapper = manager.GetWrapper(forkId);
            wrapper.StringSet("2", 2);
            wrapper.StringSet("3", 3);
            wrapper.StringSet("4", 4);

            forkId  = manager.CreateFork("test2", "some test fork", 2);
            wrapper = manager.GetWrapper(forkId);

            wrapper.KeyDelete("2");
            wrapper.StringSet("3", 4);
            wrapper.StringSet("5", 5);

            var forkId2 = manager.CreateFork("test2", "some test fork", 2);

            wrapper = manager.GetWrapper(forkId2);

            wrapper.KeyDelete("3");
            wrapper.StringSet("2", 2);
            wrapper.StringSet("6", 6);
            wrapper.StringSet("5", 4);

            var newForkId = manager.PruneForks(forkId2);

            wrapper = manager.GetWrapper(newForkId);

            var values = wrapper.StringGet <int>(new string[] { "1", "2", "3", "4", "5", "6" });

            Assert.AreEqual(5, values.Count);
            Assert.AreEqual(1, values["1"]);
            Assert.AreEqual(2, values["2"]);
            Assert.AreEqual(4, values["4"]);
            Assert.AreEqual(4, values["5"]);
            Assert.AreEqual(6, values["6"]);
        }
예제 #4
0
        static void Main(string[] args)
        {
            var store   = new StackExchangeRedisKeyValueStore(ConfigurationManager.AppSettings["KeyValueConnectionString"]);
            var manager = new ForksManager <StackExchangeRedisKeyValueStore.StackExchangeRedisDataTypesEnum>(store);

            while (true)
            {
                if (!AppId.HasValue)
                {
                    ManageApp(manager);
                }

                ManageForks(manager);
            }
        }
예제 #5
0
        public void ForksWrapper_ForkDeleteTest()
        {
            var store = new StackExchangeRedisKeyValueStore("localhost:6379");

            store.FlushKeys("KVSF*");
            var manager = new ForksManager <StackExchangeRedisKeyValueStore.StackExchangeRedisDataTypesEnum>(store);

            manager.CreateApp(1, "test", "some test app");

            var masterWrapper = manager.GetWrapper(1);

            var forkId  = manager.CreateFork("test2", "some test fork", 1);
            var forkId2 = manager.CreateFork("test3", "some test fork", 1);
            var forkId3 = manager.CreateFork("test4", "some test fork", 2);

            manager.DeleteFork(forkId3);
            manager.DeleteFork(forkId2);
            manager.DeleteFork(forkId);
        }
예제 #6
0
        public void ForksWrapper_GetMasterForksTest()
        {
            var store = new StackExchangeRedisKeyValueStore("localhost:6379");

            store.FlushKeys("KVSF*");
            var manager = new ForksManager <StackExchangeRedisKeyValueStore.StackExchangeRedisDataTypesEnum>(store);

            manager.CreateApp(1, "test", "some test app");

            var masterWrapper = manager.GetWrapper(1);

            var forkId  = manager.CreateFork("test2", "some test fork", 1);
            var forkId2 = manager.CreateFork("test3", "some test fork", 1);
            var forkId3 = manager.CreateFork("test4", "some test fork", forkId2);
            var forkId4 = manager.CreateFork("new master", "some test fork");

            var masterForks = manager.GetMasterForks();

            Assert.AreEqual(2, masterForks.Count);
        }
예제 #7
0
        private static void ManageForks(ForksManager <StackExchangeRedisKeyValueStore.StackExchangeRedisDataTypesEnum> manager)
        {
            Console.Clear();
            DisplayForks(manager);

            Console.WriteLine("Manage forks");
            Console.WriteLine("1 - Create new fork");
            Console.WriteLine("2 - Merge forks");
            Console.WriteLine("3 - Prune fork");
            Console.WriteLine("4 - Delete fork");

            var input = Console.ReadLine();

            if (string.IsNullOrEmpty(input))
            {
                return;
            }

            var choice = int.Parse(input);

            switch (choice)
            {
            case 1:
                Console.WriteLine("New Name:");
                var name = Console.ReadLine();

                Console.WriteLine("Description:");
                var description = Console.ReadLine();

                Console.WriteLine("Parent fork Id (keep empty for new master fork):");
                var parentForkIdString = Console.ReadLine();

                int?parentFork = null;
                if (!string.IsNullOrEmpty(parentForkIdString))
                {
                    parentFork = int.Parse(parentForkIdString);
                }

                try
                {
                    var newForkId = manager.CreateFork(name, description, parentFork);
                    Console.WriteLine($"Fork {newForkId} was created");
                    Thread.Sleep(500);
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.ToString());
                    Thread.Sleep(500);
                }
                return;

            case 2:
                DisplayForks(manager);

                Console.WriteLine("Choose origin fork id");
                var originForkIdString = Console.ReadLine();

                if (string.IsNullOrEmpty(originForkIdString))
                {
                    return;
                }

                int originForkId = int.Parse(originForkIdString);

                Console.WriteLine("Choose target fork id");
                var targetForkIdString = Console.ReadLine();

                if (string.IsNullOrEmpty(targetForkIdString))
                {
                    return;
                }

                int targetForkId = int.Parse(targetForkIdString);

                try
                {
                    var newForkId = manager.MergeFork(originForkId, targetForkId);
                    Console.WriteLine($"Merged Fork {newForkId} was created");
                    Thread.Sleep(500);
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.ToString());
                    Thread.Sleep(500);
                }

                return;

            case 3:
                DisplayForks(manager);

                Console.WriteLine("Choose fork id to prune (create new master)");
                var pruneForkIdString = Console.ReadLine();

                if (string.IsNullOrEmpty(pruneForkIdString))
                {
                    return;
                }

                int pruneForkId = int.Parse(pruneForkIdString);

                try
                {
                    var newForkId = manager.PruneForks(pruneForkId);
                    Console.WriteLine($"New master fork {newForkId} was created from fork {pruneForkId}");
                    Thread.Sleep(500);
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.ToString());
                    Thread.Sleep(500);
                }

                return;

            case 4:
                DisplayForks(manager);

                Console.WriteLine("Choose fork id to delete (Only leaves)");
                var deleteForkIdString = Console.ReadLine();

                if (string.IsNullOrEmpty(deleteForkIdString))
                {
                    return;
                }

                int deleteForkId = int.Parse(deleteForkIdString);

                try
                {
                    var deleted = manager.DeleteFork(deleteForkId);
                    var not     = deleted ? " " : " not ";
                    Console.WriteLine($"Fork {deleteForkId} was{not}deleted");
                    Thread.Sleep(500);
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.ToString());
                    Thread.Sleep(500);
                }

                return;

            default:
                break;
            }
        }
예제 #8
0
        private static void ManageApp(ForksManager <StackExchangeRedisKeyValueStore.StackExchangeRedisDataTypesEnum> manager)
        {
            Console.Clear();
            Console.WriteLine("Please select an application / create a new one");

            var apps = manager.GetApps();

            Console.WriteLine("0 - create new app");

            foreach (var app in apps)
            {
                Console.WriteLine($"{app.Id} - {app.Name}:{app.Description}");
            }

            var input = Console.ReadLine();

            if (string.IsNullOrEmpty(input))
            {
                return;
            }

            int choice = int.Parse(input);

            if (choice == 0)
            {
                Console.WriteLine("New Id:");

                input = Console.ReadLine();

                int id = int.MinValue;
                int.TryParse(input, out id);

                if (id == int.MinValue)
                {
                    return;
                }

                Console.WriteLine("New Name:");
                var name = Console.ReadLine();

                Console.WriteLine("Description:");
                var description = Console.ReadLine();

                try
                {
                    manager.CreateApp(id, name, description);
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.ToString());
                    return;
                }

                AppId = id;
            }
            else
            {
                manager.SetApp(choice);
                AppId = choice;
            }
        }