Пример #1
0
        public void DeleteTest()
        {
            var session  = cache.StartSession();
            var penguin1 = new BasePenguin("DeleteTest1");

            penguin1 = session.Insert(penguin1);

            var penguin2 = new BasePenguin("DeleteTest1");

            penguin2.AddRelation(PenguinRelationshipDirection.OUT, "test", penguin1.ID.Value);
            penguin2 = session.Insert(penguin2);

            Assert.Equal(1, penguin2.Datastore.Relations["test"].Count);

            session.Delete(penguin1);

            Assert.Throws(typeof(PersistenceException), () => session.GetById(penguin1.ID.Value));
            var newPenguin2 = session.GetById(penguin2.ID.Value);

            Assert.Equal(0, newPenguin2.Datastore.Relations.Count);

            session.Commit();
            Assert.Throws(typeof(PersistenceException), () => driver.GetById(penguin1.ID.Value));
            var newPenguin3 = driver.GetById(penguin2.ID.Value);

            Assert.Equal(0, newPenguin3.Datastore.Relations.Count);
        }
Пример #2
0
        public void InsertTest1()
        {
            var session = cache.StartSession();

            var penguin = new BasePenguin("test");

            penguin.DirtyDatastore.Attributes.Add("StringProp", "StringValue");
            penguin.DirtyDatastore.Attributes.Add("IntProp", 123L);
            penguin.DirtyDatastore.Attributes.Add("BoolProp", false);

            BasePenguin insertedPenguin = session.Insert(penguin);

            Assert.True(insertedPenguin != null);
            Assert.True(insertedPenguin.ID.HasValue);

            var getPenguin = session.GetById(insertedPenguin.ID.Value);

            Assert.Equal("StringValue", insertedPenguin.Datastore.Attributes["StringProp"]);
            Assert.Equal("StringValue", getPenguin.Datastore.Attributes["StringProp"]);
            Assert.Equal(123L, insertedPenguin.Datastore.Attributes["IntProp"]);
            Assert.Equal(123L, (long)getPenguin.Datastore.Attributes["IntProp"]);
            Assert.Equal(false, insertedPenguin.Datastore.Attributes["BoolProp"]);
            Assert.Equal(false, getPenguin.Datastore.Attributes["BoolProp"]);
            Assert.False(insertedPenguin.IsDirty);
            Assert.False(getPenguin.IsDirty);

            session.Commit();

            var getPenguin2 = this.driver.GetById(insertedPenguin.ID.Value);

            Assert.Equal(getPenguin, getPenguin2);
        }
Пример #3
0
        public void InsertTest1()
        {
            var penguin = new BasePenguin("test");

            penguin.DirtyDatastore.Attributes.Add("StringProp", "StringValue");
            penguin.DirtyDatastore.Attributes.Add("IntProp", 123);
            penguin.DirtyDatastore.Attributes.Add("BoolProp", false);

            BasePenguin insertedPenguin = null;

            this.driver.RunTransaction(context =>
            {
                insertedPenguin = context.Insert(penguin);
            });

            Assert.True(insertedPenguin != null);
            Assert.True(insertedPenguin.ID.HasValue);

            var getPenguin = this.driver.GetById(insertedPenguin.ID.Value);

            Assert.Equal("StringValue", insertedPenguin.Datastore.Attributes["StringProp"]);
            Assert.Equal("StringValue", getPenguin.Datastore.Attributes["StringProp"]);
            Assert.Equal(123, insertedPenguin.Datastore.Attributes["IntProp"]);
            Assert.Equal(123, (long)getPenguin.Datastore.Attributes["IntProp"]);
            Assert.Equal(false, insertedPenguin.Datastore.Attributes["BoolProp"]);
            Assert.Equal(false, getPenguin.Datastore.Attributes["BoolProp"]);
            Assert.False(insertedPenguin.IsDirty);
            Assert.False(getPenguin.IsDirty);
        }
Пример #4
0
 public static void AddRelation(this BasePenguin self, PenguinRelationshipDirection direction, string relationName, List <long> id)
 {
     id.ForEach(i =>
     {
         var basePenguinRelationship = new BasePenguinRelationship(direction, new RelationDatastore(relationName), i);
         self.DirtyDatastore.Relations.CreateOrAddToList(relationName, basePenguinRelationship);
     });
 }
Пример #5
0
        public void Add(BasePenguin entity)
        {
            if (entity.ID.HasValue)
            {
                var item = new CacheItem(entity.Clone() as BasePenguin);
                var node = new LinkedListNode <CacheItem>(item);

                lru.AddLast(node);
                cache.Add(entity.ID.Value, node);
            }
        }
Пример #6
0
        public void UpdateTest1()
        {
            var session  = this.cache.StartSession();
            var penguin1 = new BasePenguin("UpdateTest1");

            penguin1.DirtyDatastore.Attributes.Add("StringProp", "StringValue");
            penguin1.DirtyDatastore.Attributes.Add("IntProp", 123L);
            penguin1.DirtyDatastore.Attributes.Add("BoolProp", false);

            var penguin2 = new BasePenguin("UpdateTest1");

            penguin2.DirtyDatastore.Attributes.Add("StringProp", "StringValue");
            penguin2.DirtyDatastore.Attributes.Add("IntProp", 123L);
            penguin2.DirtyDatastore.Attributes.Add("BoolProp", false);

            List <BasePenguin> insertedPenguin = null;

            insertedPenguin = session.Insert(new List <BasePenguin> {
                penguin1, penguin2
            });

            Assert.False(insertedPenguin[0].IsDirty && insertedPenguin[1].IsDirty);

            insertedPenguin[0].DirtyDatastore.Attributes.Add("StringProp", "ModifiedStringValue");
            insertedPenguin[1].DirtyDatastore.Attributes.Add("IntProp", 456L);
            insertedPenguin[1].DirtyDatastore.Attributes.Add("NewStringProp", "StringValue");

            List <BasePenguin> updatedPenguins = null;

            updatedPenguins = session.Update(insertedPenguin);

            Assert.Equal("ModifiedStringValue", updatedPenguins[0].Datastore.Attributes["StringProp"]);
            Assert.Equal(123L, updatedPenguins[0].Datastore.Attributes["IntProp"]);
            Assert.Equal(false, updatedPenguins[0].Datastore.Attributes["BoolProp"]);
            Assert.Equal("StringValue", updatedPenguins[1].Datastore.Attributes["StringProp"]);
            Assert.Equal(456L, updatedPenguins[1].Datastore.Attributes["IntProp"]);
            Assert.Equal(false, updatedPenguins[1].Datastore.Attributes["BoolProp"]);
            Assert.Equal("StringValue", updatedPenguins[1].Datastore.Attributes["NewStringProp"]);

            var getPenguins = session.GetById(new List <long> {
                updatedPenguins[0].ID.Value, updatedPenguins[1].ID.Value
            });

            Assert.Equal(new ComparableHashSet <BasePenguin>(getPenguins), new ComparableHashSet <BasePenguin>(updatedPenguins));

            session.Commit();

            var getPenguins2 = this.driver.GetById(new List <long> {
                updatedPenguins[0].ID.Value, updatedPenguins[1].ID.Value
            });

            Assert.Equal(getPenguins, getPenguins2);
        }
Пример #7
0
        public void UpdateTest1()
        {
            var penguin1 = new BasePenguin("UpdateTest1");

            penguin1.DirtyDatastore.Attributes.Add("StringProp", "StringValue");
            penguin1.DirtyDatastore.Attributes.Add("IntProp", 123L);
            penguin1.DirtyDatastore.Attributes.Add("BoolProp", false);

            var penguin2 = new BasePenguin("UpdateTest1");

            penguin2.DirtyDatastore.Attributes.Add("StringProp", "StringValue");
            penguin2.DirtyDatastore.Attributes.Add("IntProp", 123L);
            penguin2.DirtyDatastore.Attributes.Add("BoolProp", false);

            List <BasePenguin> insertedPenguin = null;

            this.driver.RunTransaction(context =>
            {
                insertedPenguin = context.Insert(new List <BasePenguin> {
                    penguin1, penguin2
                });
            });

            Assert.False(insertedPenguin[0].IsDirty && insertedPenguin[1].IsDirty);

            insertedPenguin[0].DirtyDatastore.Attributes.Add("StringProp", "ModifiedStringValue");
            insertedPenguin[1].DirtyDatastore.Attributes.Add("IntProp", 456L);
            insertedPenguin[1].DirtyDatastore.Attributes.Add("NewStringProp", "StringValue");

            List <BasePenguin> updatedPenguins = null;

            this.driver.RunTransaction(context =>
            {
                updatedPenguins = context.Update(insertedPenguin);
            });

            Assert.Equal("ModifiedStringValue", updatedPenguins[0].Datastore.Attributes["StringProp"]);
            Assert.Equal(123L, updatedPenguins[0].Datastore.Attributes["IntProp"]);
            Assert.Equal(false, updatedPenguins[0].Datastore.Attributes["BoolProp"]);
            Assert.Equal("StringValue", updatedPenguins[1].Datastore.Attributes["StringProp"]);
            Assert.Equal(456L, updatedPenguins[1].Datastore.Attributes["IntProp"]);
            Assert.Equal(false, updatedPenguins[1].Datastore.Attributes["BoolProp"]);
            Assert.Equal("StringValue", updatedPenguins[1].Datastore.Attributes["NewStringProp"]);

            var getPenguins = this.driver.GetById(new List <long> {
                updatedPenguins[0].ID.Value, updatedPenguins[1].ID.Value
            });

            Assert.Equal(new ComparableHashSet <BasePenguin>(getPenguins), new ComparableHashSet <BasePenguin>(updatedPenguins));
        }
Пример #8
0
 public void Update(BasePenguin entity)
 {
     if (entity.ID.HasValue)
     {
         try
         {
             AcquireLock(entity.ID.Value);
             _update(entity);
         }
         finally
         {
             ReleaseLock(entity.ID.Value);
         }
     }
 }
Пример #9
0
        public void InsertTest2()
        {
            var session = cache.StartSession();

            var relatedPenguins = new List <BasePenguin> {
                new BasePenguin("in"), new BasePenguin("in"), new BasePenguin("out")
            };

            relatedPenguins = session.Insert(relatedPenguins);

            Assert.True(relatedPenguins.All(i => i.ID.HasValue));

            var penguin = new BasePenguin("obj");

            penguin.AddRelation(PenguinRelationshipDirection.IN, "rel_in", relatedPenguins[0].ID.Value);
            penguin.AddRelation(PenguinRelationshipDirection.IN, "rel_in", relatedPenguins[1].ID.Value);
            penguin.AddRelation(PenguinRelationshipDirection.OUT, "rel_out", relatedPenguins[2].ID.Value);
            BasePenguin insertedPenguin = null;

            insertedPenguin = session.Insert(penguin);

            Assert.True(insertedPenguin.ID.HasValue);
            Assert.True(insertedPenguin.Datastore.Relations.ContainsKey("rel_in") && insertedPenguin.Datastore.Relations["rel_in"].Count == 2);
            Assert.True(insertedPenguin.Datastore.Relations.ContainsKey("rel_out") && insertedPenguin.Datastore.Relations["rel_out"].Count == 1);
            Assert.Equal(new[] { relatedPenguins[0], relatedPenguins[1] }.Select(i => i.ID.Value).OrderBy(i => i).ToList(), insertedPenguin.Datastore.Relations["rel_in"].Select(i => i.Target.ID.Value).OrderBy(i => i).ToList());
            Assert.True(insertedPenguin.Datastore.Relations["rel_out"].First().Target.ID.Value == relatedPenguins[2].ID.Value);

            var getPenguin = session.GetById(insertedPenguin.ID.Value);

            Assert.True(getPenguin.Datastore.Relations.ContainsKey("rel_in") && getPenguin.Datastore.Relations["rel_in"].Count == 2);
            Assert.True(getPenguin.Datastore.Relations.ContainsKey("rel_out") && getPenguin.Datastore.Relations["rel_out"].Count == 1);
            Assert.Equal(new[] { relatedPenguins[0], relatedPenguins[1] }.Select(i => i.ID.Value).OrderBy(i => i).ToList(), getPenguin.Datastore.Relations["rel_in"].Select(i => i.Target.ID.Value).OrderBy(i => i).ToList());
            Assert.True(getPenguin.Datastore.Relations["rel_out"].First().Target.ID.Value == relatedPenguins[2].ID.Value);

            relatedPenguins = session.GetById(relatedPenguins.Select(i => i.ID.Value).ToList());
            Assert.True(relatedPenguins[0].Datastore.Relations.ContainsKey("rel_in") && relatedPenguins[0].Datastore.Relations["rel_in"].First().Target.ID.Value == insertedPenguin.ID.Value);
            Assert.Equal(PenguinRelationshipDirection.OUT, relatedPenguins[0].Datastore.Relations["rel_in"].First().Direction);
            Assert.True(relatedPenguins[1].Datastore.Relations.ContainsKey("rel_in") && relatedPenguins[1].Datastore.Relations["rel_in"].First().Target.ID.Value == insertedPenguin.ID.Value);
            Assert.Equal(PenguinRelationshipDirection.OUT, relatedPenguins[1].Datastore.Relations["rel_in"].First().Direction);
            Assert.True(relatedPenguins[2].Datastore.Relations.ContainsKey("rel_out") && relatedPenguins[2].Datastore.Relations["rel_out"].First().Target.ID.Value == insertedPenguin.ID.Value);
            Assert.Equal(PenguinRelationshipDirection.IN, relatedPenguins[2].Datastore.Relations["rel_out"].First().Direction);

            session.Commit();

            var getPenguin2 = this.driver.GetById(insertedPenguin.ID.Value);

            Assert.Equal(getPenguin, getPenguin2);
        }
Пример #10
0
        public void UpdateTest2()
        {
            var relatedPenguins = new List <BasePenguin> {
                new BasePenguin("in"), new BasePenguin("in"), new BasePenguin("out"), new BasePenguin("out")
            };

            this.driver.RunTransaction(context =>
            {
                relatedPenguins = context.Insert(relatedPenguins);
            });

            Assert.True(relatedPenguins.All(i => i.ID.HasValue));

            var penguin = new BasePenguin("obj");

            penguin.AddRelation(PenguinRelationshipDirection.IN, "rel_in", relatedPenguins[0].ID.Value);
            penguin.AddRelation(PenguinRelationshipDirection.IN, "rel_in", relatedPenguins[1].ID.Value);
            penguin.AddRelation(PenguinRelationshipDirection.OUT, "rel_out", relatedPenguins[2].ID.Value);
            BasePenguin insertedPenguin = null;

            this.driver.RunTransaction(context =>
            {
                insertedPenguin = context.Insert(penguin);
            });

            insertedPenguin.DirtyDatastore.Relations.CreateOrAddToList("rel_out", insertedPenguin.Datastore.Relations["rel_out"].First());
            insertedPenguin.DirtyDatastore.Relations.CreateOrAddToList("rel_out", new BasePenguinRelationship("rel_out", PenguinRelationshipDirection.OUT, relatedPenguins[3].ID.Value));
            insertedPenguin.DirtyDatastore.Relations.CreateOrAddToList("rel_in", insertedPenguin.Datastore.Relations["rel_in"].ToList().Find(i => i.Target.ID == relatedPenguins[0].ID.Value));

            BasePenguin updatedPenguin = null;

            this.driver.RunTransaction(context =>
            {
                updatedPenguin = context.Update(insertedPenguin);
            });

            Assert.Equal(1, updatedPenguin.Datastore.Relations["rel_in"].Count);
            Assert.Equal(insertedPenguin.DirtyDatastore.Relations["rel_in"].First(), updatedPenguin.Datastore.Relations["rel_in"].First());
            Assert.Equal(2, updatedPenguin.Datastore.Relations["rel_out"].Count);
            Assert.Equal(insertedPenguin.DirtyDatastore.Relations["rel_out"].Select(i => i.Target.ID.Value).OrderBy(i => i).ToList(), new List <long> {
                relatedPenguins[2].ID.Value, relatedPenguins[3].ID.Value
            });

            var getPenguin = this.driver.GetById(updatedPenguin.ID.Value);

            Assert.Equal(updatedPenguin.Datastore, getPenguin.Datastore);
            Assert.Equal(updatedPenguin, getPenguin);
        }
Пример #11
0
 private void _update(BasePenguin entity)
 {
     if (entity.ID.HasValue)
     {
         LinkedListNode <CacheItem> node;
         if (cache.TryGetValue(entity.ID.Value, out node))
         {
             node.Value.Penguin = entity.Clone() as BasePenguin;
             node.Value.hit++;
             lru.Remove(node);
             lru.AddLast(node);
         }
         else
         {
             Add(entity);
         }
     }
 }
Пример #12
0
        public void DeleteTest()
        {
            var penguin1 = new BasePenguin("DeleteTest1");

            this.driver.RunTransaction(context => penguin1 = context.Insert(penguin1));

            var penguin2 = new BasePenguin("DeleteTest1");

            penguin2.AddRelation(PenguinRelationshipDirection.OUT, "test", penguin1.ID.Value);
            this.driver.RunTransaction(context => penguin2 = context.Insert(penguin2));

            Assert.Equal(1, penguin2.Datastore.Relations["test"].Count);

            this.driver.RunTransaction(context => context.Delete(penguin1));

            Assert.Throws(typeof(PersistenceException), () => this.driver.GetById(penguin1.ID.Value));
            var newPenguin2 = this.driver.GetById(penguin2.ID.Value);

            Assert.Equal(0, newPenguin2.Datastore.Relations.Count);
        }
 public virtual BasePenguin Insert(BasePenguin penguin)
 {
     return(this.Insert(new List <BasePenguin> {
         penguin
     })[0]);
 }
 public virtual void Delete(BasePenguin penguin)
 {
     this.Delete(new List <BasePenguin> {
         penguin
     });
 }
 public virtual BasePenguin Update(BasePenguin penguin)
 {
     return(this.Update(new List <BasePenguin> {
         penguin
     })[0]);
 }
Пример #16
0
        public void Test1()
        {
            var outputPath    = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
            var generatedFile = Path.Combine(new DirectoryInfo(outputPath).Parent.Parent.Parent.FullName, "_test.cs");

            var generator = new CodeGenerator(new Options
            {
                InputFile  = Path.Combine(outputPath, "test.penguin-model"),
                OutputFile = Path.Combine(outputPath, "_test.cs"),
                Namespace  = "OnePenguin.Essentials.CodeGenerator.Tests.Test",
                Assemblies = new List <string> {
                    Assembly.GetExecutingAssembly().Location
                },
                OutputDllFile = Path.Combine(outputPath, "_test.dll"),
            });

            generator.Generate();

            //generator.Compile();

            if (!File.Exists(generatedFile) || !CompareFiles(Path.Combine(outputPath, "_test.cs"), generatedFile))
            {
                File.Copy(Path.Combine(outputPath, "_test.cs"), generatedFile);
                Assert.False(true, "Please re-compile the project and run the test.");
            }
            else
            {
                var t = Assembly.GetExecutingAssembly().GetType("OnePenguin.Essentials.CodeGenerator.Tests.Test.Test1Penguin");
                Assert.NotNull(t);

                var props   = t.GetProperties().ToList();
                var penguin = Activator.CreateInstance(t) as BasePenguin;

                Assert.True(props.Exists(i => i.Name == "TestInt"));
                props.Find(i => i.Name == "TestInt").SetValue(penguin, 123);
                Assert.Equal(123L, penguin.DirtyDatastore.Attributes["TestInt"]);
                Assert.Equal(123L, props.Find(i => i.Name == "TestInt").GetValue(penguin));

                Assert.True(props.Exists(i => i.Name == "TestInt2"));
                props.Find(i => i.Name == "TestInt2").SetValue(penguin, 123);
                Assert.Equal(123L, penguin.DirtyDatastore.Attributes["TestInt2"]);
                Assert.Equal(123L, props.Find(i => i.Name == "TestInt2").GetValue(penguin));

                var dt = DateTime.Now;
                Assert.True(props.Exists(i => i.Name == "TestDateTime"));
                props.Find(i => i.Name == "TestDateTime").SetValue(penguin, dt);
                Assert.Equal(dt, penguin.DirtyDatastore.Attributes["TestDateTime"]);
                Assert.Equal(dt, props.Find(i => i.Name == "TestDateTime").GetValue(penguin));

                Assert.True(props.Exists(i => i.Name == "TestString"));
                props.Find(i => i.Name == "TestString").SetValue(penguin, "123");
                Assert.Equal("123", penguin.DirtyDatastore.Attributes["TestString"]);
                Assert.Equal("123", props.Find(i => i.Name == "TestString").GetValue(penguin));

                var relatedPenguin = new BasePenguin(1, new Datastore("test"));

                Assert.True(props.Exists(i => i.Name == "TestRelation"));
                props.Find(i => i.Name == "TestRelation").SetValue(penguin, relatedPenguin);
                Assert.Equal(new PenguinReference(relatedPenguin.ID.Value), penguin.DirtyDatastore.Relations["TestRelation"].First().Target);
                Assert.Equal(new PenguinReference(relatedPenguin.ID.Value), props.Find(i => i.Name == "TestRelation").GetValue(penguin));

                Assert.True(props.Exists(i => i.Name == "TestRelation2"));
                props.Find(i => i.Name == "TestRelation2").SetValue(penguin, new List <PenguinReference> {
                    relatedPenguin
                });
                Assert.Equal(relatedPenguin.ID.Value, penguin.DirtyDatastore.Relations["TestRelation2"].First().Target.ID.Value);
                Assert.Equal(new List <PenguinReference> {
                    relatedPenguin
                }, props.Find(i => i.Name == "TestRelation2").GetValue(penguin));

                File.Delete(generatedFile);
            }
        }
Пример #17
0
 public CacheItem(BasePenguin penguin)
 {
     this.Penguin   = penguin;
     this.timestamp = DateTime.Now.Ticks;
 }
Пример #18
0
 public static void AddRelation(this BasePenguin self, PenguinRelationshipDirection direction, string relationName, long id)
 {
     self.AddRelation(direction, relationName, new List <long> {
         id
     });
 }