public void TestJsonNotExistsExpression() { var jsonExpressionString = @" { ""key"": ""environment"", ""operator"":""NotExists"" }"; var expressions = JsonExpressionParser.Parse(jsonExpressionString); var labels = new Dictionary <string, string> { ["environment"] = LabelSelectorTester_Test.GenerateRandomString(), }; var result = LabelSelectorTester.Test(labels, expressions); Assert.IsFalse(result); labels = new Dictionary <string, string> { }; result = LabelSelectorTester.Test(labels, expressions); Assert.IsTrue(result); }
public void TestJsonNotInExpression() { const int n = 10; var randomValues = new List <string>(); for (var i = 0; i < n; i += 1) { var randomString = LabelSelectorTester_Test.GenerateRandomString(); randomValues.Add(randomString); } var jsonExpressionString = @" { ""key"": ""environment"", ""operator"":""NotIn"", ""values"": [ " + string.Join(",\n", randomValues.Select(value => $@"""{value}""")) + @" ] }"; var expressions = JsonExpressionParser.Parse(jsonExpressionString); bool result; Dictionary <string, string> labels; foreach (var randomValue in randomValues) { labels = new Dictionary <string, string> { ["environment"] = randomValue, }; result = LabelSelectorTester.Test(labels, expressions); Assert.IsFalse(result); } labels = new Dictionary <string, string> { ["environment"] = LabelSelectorTester_Test.GenerateRandomString(), }; result = LabelSelectorTester.Test(labels, expressions); Assert.IsTrue(result); }
static async Task Main(string[] args) { Console.WriteLine("Creating and seeding database..."); var options = new DbContextOptionsBuilder <TransactionContext>() .UseSqlite("Data Source=transactions.db").Options; using (var context = new TransactionContext(options)) { await context.Database.EnsureDeletedAsync(); await context.Database.EnsureCreatedAsync(); context.DbTransactions.AddRange(Transaction.GetList(1000)); await context.SaveChangesAsync(); } var optionsWithLog = new DbContextOptionsBuilder <TransactionContext>() .UseSqlite("Data Source=transactions.db") .UseLoggerFactory(loggerFactory).Options; using (var context = new TransactionContext(optionsWithLog)) { var count = await context.DbTransactions.CountAsync(); Console.WriteLine($"Verified insert count: {count}."); Console.WriteLine("Parsing expression..."); var parser = new JsonExpressionParser(); var predicate = parser.ParseExpressionOf <Transaction>( JsonDocument.Parse( await File.ReadAllTextAsync("databaseRules.json"))); Console.WriteLine("Retrieving from database..."); var query = context.DbTransactions.Where(predicate) .OrderBy(t => t.Id); var results = await query.ToListAsync(); Console.WriteLine($"Retrieved {results.Count}"); Console.WriteLine("Sample:"); Console.WriteLine(results[0]); } }