Exemple #1
0
        public static void TestContractB_5(string CONF_SRC)
        {
            var conf = LaconicConfiguration.CreateFromString(CONF_SRC);

            using (var app = new AzosApplication(null, conf.Root))
            {
                var cl = new TestContractBClient(app.Glue, app.ConfigRoot.AttrByName("cs").Value);

                var ret = cl.GetPersonalData(new int[] { 1, 23, 97 });

                Aver.AreEqual(3, ret.Count);

                Aver.IsTrue(1 == ret[0].ID);
                Aver.IsTrue(23 == ret[1].ID);
                Aver.IsTrue(97 == ret[2].ID);

                Aver.AreEqual("Oleg1", ret[0].FirstName);
                Aver.AreEqual("Oleg23", ret[1].FirstName);
                Aver.AreEqual("Oleg97", ret[2].FirstName);

                Aver.AreEqual("Popov1", ret[0].LastName);
                Aver.AreEqual("Popov23", ret[1].LastName);
                Aver.AreEqual("Popov97", ret[2].LastName);

                Aver.AreEqual(false, ret[0].Certified);
                Aver.AreEqual(false, ret[1].Certified);
                Aver.AreEqual(false, ret[2].Certified);

                dumpBindingTransports(cl.Binding);
            }
        }
Exemple #2
0
        protected void GetErrorLaconicTags(
            ref List <ITagSpan <IErrorTag> > tags,
            string src,
            int startPosition = 0)
        {
            var ml  = new MessageList();
            var lxr = new LaconfigLexer(new StringSource(src), ml);
            var cfg = new LaconicConfiguration();
            var ctx = new LaconfigData(cfg);
            var p   = new LaconfigParser(ctx, lxr, ml);

            p.Parse();
            TaskManager.Refresh(m_DocName);
            foreach (var message in ml)
            {
                TaskManager.AddError(message, m_DocName);


                var start = message.Token == null ?
                            message.Position.CharNumber :
                            message.Token.StartPosition.CharNumber > 4 ?
                            message.Token.StartPosition.CharNumber - 5 :
                            0;

                var length = message.Token == null ?
                             src.Length - 1 - start :
                             src.Length - start > 10 ?
                             10 :
                             src.Length - start;

                tags.Add(CreateTagSpan(start, length));
            }
        }
Exemple #3
0
        public static async Task ASYNC_TestContractA_TwoWayCall_Timeout(string CONF_SRC)
        {
            TestServerA.s_Accumulator = 0;

            var conf = LaconicConfiguration.CreateFromString(CONF_SRC);

            using (var app = new AzosApplication(null, conf.Root))
            {
                var cl = new TestContractAClient(app.Glue, app.ConfigRoot.AttrByName("cs").Value);
                cl.TimeoutMs = 2000;

                CallSlot call = null;
                try
                {
                    call = await cl.Async_Sleeper(10000);

                    call.GetValue <int>();
                }
                catch (ClientCallException err)
                {
                    Aver.IsTrue(CallStatus.Timeout == err.Status);
                    return;
                }
                catch (System.IO.IOException err) //sync binding throws IO exception
                {
                    Aver.IsTrue(err.Message.Contains("after a period of time"));
                    return;
                }

                Aver.Fail("Invalid Call status: " + (call != null ? call.CallStatus.ToString() : "call==null"));
            }
        }
            /// <summary>Provides package descriptor</summary>
            /// <param name="name">Mnemonic name of the package (i.e. application name)</param>
            /// <param name="source">Source directory where to take files from</param>
            /// <param name="relPath">Relative path which is appended to the root path where files will be placed</param>
            public PackageInfo(string name, FileSystemDirectory source, string relPath)
            {
                Name         = name ?? CoreConsts.UNKNOWN;
                Source       = source;
                RelativePath = relPath;

                ConfigSectionNode manifest = null;
                var mFile = source.GetFile(ManifestUtils.MANIFEST_FILE_NAME);

                if (mFile != null)
                {
                    try
                    {
                        manifest = LaconicConfiguration.CreateFromString(mFile.ReadAllText()).Root;
                    }
                    catch (Exception error)
                    {
                        throw new AzosIOException(StringConsts.LOCAL_INSTALL_INSTALL_SET_PACKAGE_MANIFEST_READ_ERROR.Args(Name, error.ToMessageWithType()), error);
                    }
                }

                if (manifest == null)
                {
                    throw new AzosIOException(StringConsts.LOCAL_INSTALL_INSTALL_SET_PACKAGE_WITHOUT_MANIFEST_ERROR.Args(Name, ManifestUtils.MANIFEST_FILE_NAME));
                }

                manifest.AttrByName(ManifestUtils.CONFIG_NAME_ATTR, true).Value       = name;
                manifest.AttrByName(ManifestUtils.CONFIG_LOCAL_PATH_ATTR, true).Value = relPath;
                manifest.ResetModified();

                Manifest = manifest;
            }
Exemple #5
0
        /// <summary>
        /// Parses command string into config node
        /// </summary>
        public static Configuration ParseCommand(string command, IEnvironmentVariableResolver resolver = null)
        {
            var cfg = LaconicConfiguration.CreateFromString(command);

            cfg.EnvironmentVarResolver = resolver;
            return(cfg);
        }
Exemple #6
0
        public static void TestContractB_1_Async(string CONF_SRC)
        {
            var conf = LaconicConfiguration.CreateFromString(CONF_SRC);

            using (var app = new ServiceBaseApplication(null, conf.Root))
            {
                var cl = new TestContractBClient(App.ConfigRoot.AttrByName("cs").Value);

                var person = new PersonData {
                    ID = 10, FirstName = "Joe", LastName = "Tester"
                };

                var slot = cl.Async_SetPersonOfTheDay(person);

                slot.CheckVoidValue();

                slot = cl.Async_GetPersonOfTheDay();

                var ret = slot.GetValue <PersonData>();

                Assert.AreEqual(10, ret.ID);
                Assert.AreEqual("Joe", ret.FirstName);
                Assert.AreEqual("Tester", ret.LastName);

                dumpBindingTransports(cl.Binding);
            }
        }
Exemple #7
0
        public static void TestContractB_2(string CONF_SRC)
        {
            var conf = LaconicConfiguration.CreateFromString(CONF_SRC);

            using (var app = new ServiceBaseApplication(null, conf.Root))
            {
                var cl = new TestContractBClient(App.ConfigRoot.AttrByName("cs").Value);

                var person = new PersonData {
                    ID = 10, FirstName = "Joe", LastName = "Tester"
                };

                cl.SetPersonOfTheDay(person);

                var ret = cl.GetPersonOfTheDay();

                Assert.AreEqual(10, ret.ID);
                Assert.AreEqual("Joe", ret.FirstName);
                Assert.AreEqual("Tester", ret.LastName);

                var sum = cl.SummarizeAndFinish(); //destructor

                Assert.AreEqual("That is all! for the person Tester", sum);

                cl.ForgetRemoteInstance();

                Assert.AreEqual("Felix", cl.GetName()); //this will allocate the new isntance

                sum = cl.SummarizeAndFinish();          // this will kill the instance again
                Assert.AreEqual("That is all! but no person of the day was set", sum);

                dumpBindingTransports(cl.Binding);
            }
        }
Exemple #8
0
        public static void TestContractB_6(string CONF_SRC)
        {
            var conf = LaconicConfiguration.CreateFromString(CONF_SRC);

            using (var app = new ServiceBaseApplication(null, conf.Root))
            {
                var cl = new TestContractBClient(App.ConfigRoot.AttrByName("cs").Value);

                var ret = cl.GetPersonalData(new int[] { 1, 23, 97 }, true, 127000m);

                Assert.AreEqual(3, ret.Count);

                Assert.AreEqual(1, ret[0].ID);
                Assert.AreEqual(23, ret[1].ID);
                Assert.AreEqual(97, ret[2].ID);

                Assert.AreEqual("Oleg1", ret[0].FirstName);
                Assert.AreEqual("Oleg23", ret[1].FirstName);
                Assert.AreEqual("Oleg97", ret[2].FirstName);

                Assert.AreEqual("Popov1", ret[0].LastName);
                Assert.AreEqual("Popov23", ret[1].LastName);
                Assert.AreEqual("Popov97", ret[2].LastName);

                Assert.AreEqual(true, ret[0].Certified);
                Assert.AreEqual(true, ret[1].Certified);
                Assert.AreEqual(true, ret[2].Certified);

                Assert.AreEqual(127000m, ret[0].Salary);
                Assert.AreEqual(127000m, ret[1].Salary);
                Assert.AreEqual(127000m, ret[2].Salary);

                dumpBindingTransports(cl.Binding);
            }
        }
Exemple #9
0
        public static void TestContractA_TwoWayCall_Timeout(string CONF_SRC)
        {
            TestServerA.s_Accumulator = 0;

            var conf = LaconicConfiguration.CreateFromString(CONF_SRC);

            using (var app = new ServiceBaseApplication(null, conf.Root))
            {
                var cl = new TestContractAClient(App.ConfigRoot.AttrByName("cs").Value);
                cl.TimeoutMs = 2000;

                try
                {
                    cl.Sleeper(5000);
                }
                catch (ClientCallException err)
                {
                    Assert.AreEqual(CallStatus.Timeout, err.CallStatus);
                    return;
                }
                catch (System.IO.IOException err) //sync binding throws IO exception
                {
                    Assert.IsTrue(err.Message.Contains("after a period of time"));
                    return;
                }

                Assert.Fail("Invalid Call status");
            }
        }
Exemple #10
0
        //this will throw
        public static void TestContractB_9(string CONF_SRC)
        {
            var conf = LaconicConfiguration.CreateFromString(CONF_SRC);

            using (var app = new ServiceBaseApplication(null, conf.Root))
            {
                var cl = new TestContractBClient(App.ConfigRoot.AttrByName("cs").Value);

                Exception err = null;
                try
                {
                    cl.GetDailyStatuses(1); //this is needed to init type registry for sync binding
                                            //because otherwise it will abort the channel instead of marshalling exception back
                    cl.GetDailyStatuses(550);
                }
                catch (Exception error)
                {
                    err = error;
                }
                Assert.IsNotNull(err);
                Assert.AreEqual(typeof(RemoteException), err.GetType());

                Assert.IsTrue(err.Message.Contains("MessageSizeException"));
                Assert.IsTrue(err.Message.Contains("exceeds limit"));
            }
        }
Exemple #11
0
        public void Configed_MemoryBufferDestinationCapacity()
        {
            var conf = LaconicConfiguration.CreateFromString(CONF_SRC1);

            using (var app = new ServiceBaseApplication(null, conf.Root))
            {
                var mbd = ((LogService)app.Log).Destinations.First() as MemoryBufferDestination;

                System.Threading.Thread.Sleep(3000);
                mbd.BufferSize = 10;

                for (int i = 0; i < 100; i++)
                {
                    app.Log.Write(new Message {
                        Type = Log.MessageType.Info, From = "test", Text = "i={0}".Args(i)
                    });
                }
                System.Threading.Thread.Sleep(3000);

                Assert.AreEqual(10, mbd.Buffered.Count());

                Assert.AreEqual("i=99", mbd.BufferedTimeDescending.First().Text);
                Assert.AreEqual("i=90", mbd.BufferedTimeDescending.Last().Text);
            }
        }
Exemple #12
0
        public void Configuration_NamedStore()
        {
            var conf = LaconicConfiguration.CreateFromString(CONF_SRC);

            using (var app = new ServiceBaseApplication(null, conf.Root))
            {
                using (var store = new CacheStore("BANKING"))
                {
                    store.Configure(null);

                    Assert.AreEqual(789001, store.TableOptions["Account"].BucketCount);
                    Assert.AreEqual(23, store.TableOptions["Account"].RecPerPage);
                    Assert.AreEqual(149, store.TableOptions["Account"].LockCount);
                    Assert.AreEqual(12000, store.TableOptions["Account"].MaxAgeSec);
                    Assert.AreEqual(true, store.TableOptions["Account"].ParallelSweep);

                    Assert.AreEqual(1023, store.TableOptions["BaLaNCE"].BucketCount);
                    Assert.AreEqual(3, store.TableOptions["BaLaNCE"].RecPerPage);
                    Assert.AreEqual(11, store.TableOptions["BaLaNCE"].LockCount);
                    Assert.AreEqual(230000, store.TableOptions["BaLaNCE"].MaxAgeSec);
                    Assert.AreEqual(false, store.TableOptions["BaLaNCE"].ParallelSweep);

                    var tbl = store["AccoUNT"];
                    Assert.AreEqual(789001, tbl.BucketCount);
                    Assert.AreEqual(23, tbl.RecPerPage);
                    Assert.AreEqual(789001 * 23, tbl.Capacity);
                    Assert.AreEqual(149, tbl.LockCount);
                    Assert.AreEqual(12000, tbl.MaxAgeSec);
                    Assert.AreEqual(true, tbl.ParallelSweep);
                }
            }
        }
Exemple #13
0
        public static void TASK_TestContractA_TwoWayCall_Timeout(string CONF_SRC)
        {
            TestServerA.s_Accumulator = 0;

            var conf = LaconicConfiguration.CreateFromString(CONF_SRC);

            using (var app = new ServiceBaseApplication(null, conf.Root))
            {
                var cl = new TestContractAClient(App.ConfigRoot.AttrByName("cs").Value);
                cl.TimeoutMs = 2000;

                System.Threading.Tasks.Task <CallSlot> task = null;
                try
                {
                    task = cl.Async_Sleeper(10000).AsTask;
                    task.Result.GetValue <int>();
                }
                catch (ClientCallException err)
                {
                    Assert.AreEqual(CallStatus.Timeout, err.CallStatus);
                    return;
                }
                catch (System.IO.IOException err) //sync binding throws IO exception
                {
                    Assert.IsTrue(err.Message.Contains("after a period of time"));
                    return;
                }

                Assert.Fail("Invalid Call status: " + (task != null ? task.Result.CallStatus.ToString() : "task==null"));
            }
        }
Exemple #14
0
        public void Configed_MemoryBufferDestination()
        {
            var conf = LaconicConfiguration.CreateFromString(CONF_SRC1);

            using (var app = new ServiceBaseApplication(null, conf.Root))
            {
                var mbd = ((LogService)app.Log).Destinations.First() as MemoryBufferDestination;

                System.Threading.Thread.Sleep(3000);
                mbd.ClearBuffer();


                app.Log.Write(new Message {
                    Type = Log.MessageType.Info, From = "test", Text = "Hello1"
                });
                System.Threading.Thread.Sleep(1000);
                app.Log.Write(new Message {
                    Type = Log.MessageType.Info, From = "test", Text = "Hello2"
                });

                System.Threading.Thread.Sleep(3000);

                Assert.AreEqual(2, mbd.Buffered.Count());

                Assert.AreEqual("Hello1", mbd.BufferedTimeAscending.First().Text);
                Assert.AreEqual("Hello2", mbd.BufferedTimeAscending.Last().Text);

                Assert.AreEqual("Hello2", mbd.BufferedTimeDescending.First().Text);
                Assert.AreEqual("Hello1", mbd.BufferedTimeDescending.Last().Text);
            }
        }
Exemple #15
0
        public override string Execute()
        {
            var conf = new LaconicConfiguration();

            conf.CreateFromNode(App.ConfigRoot);
            return(conf.SaveToString());
        }
Exemple #16
0
        public void Configuration_UnNamedStore()
        {
            var conf = LaconicConfiguration.CreateFromString(CONF_SRC);

            using (var app = new ServiceBaseApplication(null, conf.Root))
            {
                using (var store = new CacheStore("SomeStoreThat will be configured from default store without name"))
                {
                    store.Configure(null);

                    Assert.AreEqual(true, store.ParallelSweep);
                    Assert.AreEqual(true, store.InstrumentationEnabled);

                    Assert.AreEqual(1234567, store.TableOptions["doctor"].BucketCount);
                    Assert.AreEqual(7, store.TableOptions["doctor"].RecPerPage);
                    Assert.AreEqual(19, store.TableOptions["doctor"].LockCount);
                    Assert.AreEqual(193, store.TableOptions["doctor"].MaxAgeSec);
                    Assert.AreEqual(true, store.TableOptions["doctor"].ParallelSweep);

                    Assert.AreEqual(451000000, store.TableOptions["PATIENT"].BucketCount);
                    Assert.AreEqual(17, store.TableOptions["PATIENT"].RecPerPage);
                    Assert.AreEqual(1025, store.TableOptions["PATIENT"].LockCount);
                    Assert.AreEqual(739, store.TableOptions["PATIENT"].MaxAgeSec);
                    Assert.AreEqual(true, store.TableOptions["PATIENT"].ParallelSweep);
                }
            }
        }
Exemple #17
0
        public static void TestContractB_8(string CONF_SRC)
        {
            var conf = LaconicConfiguration.CreateFromString(CONF_SRC);

            using (var app = new ServiceBaseApplication(null, conf.Root))
            {
                var cl = new TestContractBClient(App.ConfigRoot.AttrByName("cs").Value);

                var ret = cl.GetDailyStatuses(150);

                Assert.AreEqual(150, ret.Count);
                var dt = new DateTime(1980, 1, 1);

                Assert.AreEqual(100, ret[dt].Count);
                Assert.AreEqual("Oleg0", ret[dt][0].FirstName);
                Assert.AreEqual("Oleg99", ret[dt][99].FirstName);
                Assert.AreEqual("Popov99", ret[dt][99].LastName);
                Assert.AreEqual(99000m, ret[dt][99].Salary);

                dt = dt.AddSeconds(ret.Count - 1);

                Assert.AreEqual(100, ret[dt].Count);
                Assert.AreEqual("Oleg0", ret[dt][0].FirstName);
                Assert.AreEqual("Oleg99", ret[dt][99].FirstName);
                Assert.AreEqual("Popov99", ret[dt][99].LastName);
                Assert.AreEqual(99000m, ret[dt][99].Salary);

                dumpBindingTransports(cl.Binding);
            }
        }
Exemple #18
0
        public static async Task ASYNC_MANY_AWAITS_TestContractA_TwoWayCall(string CONF_SRC)
        {
            TestServerA.s_Accumulator = 0;

            var conf = LaconicConfiguration.CreateFromString(CONF_SRC);

            using (var app = new AzosApplication(null, conf.Root))
            {
                var cl = new TestContractAClient(app.Glue, app.ConfigRoot.AttrByName("cs").Value);

                var call = cl.Async_Method1(234);

                var result = await call.AsTaskReturning <string>();

                Aver.IsTrue(call.Available);

                Aver.AreEqual("234", result);

                Aver.AreEqual("234", (await call).GetValue <string>()); //this will instantly return as it is completed already
                Aver.AreEqual("234", (await call).GetValue <string>()); //so will this
                Aver.AreEqual("234", (await call).GetValue <string>()); //and this... and so on.... can do many awaits

                Aver.AreEqual(234, TestServerA.s_Accumulator);
            }
        }
Exemple #19
0
        public void Test_06()
        {
            var c1  = LaconicConfiguration.CreateFromString(@"root{ a='//notcomment' }");
            var txt = c1.SaveToString();
            var c2  = LaconicConfiguration.CreateFromString(txt);

            Aver.AreEqual(1, c2.Root.AttrCount);
            Aver.AreEqual(@"//notcomment", c2.Root.AttrByName("a").Value);
        }
Exemple #20
0
        public void Test_04()
        {
            var c1  = LaconicConfiguration.CreateFromString("root{ a='00\u0034yes' }");
            var txt = c1.SaveToString();
            var c2  = LaconicConfiguration.CreateFromString(txt);

            Aver.AreEqual(1, c2.Root.AttrCount);
            Aver.AreEqual("00\u0034yes", c2.Root.AttrByName("a").Value);
        }
Exemple #21
0
                                  public override void Validate(ValidationContext ctx)
                                  {
                                      var output = ctx.Output;

                                      try
                                      {
                                          var packages = Packages;
                                      }
                                      catch (Exception error)
                                      {
                                          output.Add(new MetabaseValidationMsg(MetabaseValidationMessageType.Error, this, null, error.ToMessageWithType(), error));
                                          return;
                                      }

                                      try
                                      {
                                          Metabank.fsAccess("BinCatalog.Validate", BIN_CATALOG,
                                                            (session, dir) =>
                    {
                        foreach (var sdn in dir.SubDirectoryNames)
                        {
                            using (var sdir = dir.GetSubDirectory(sdn))
                                using (var mf = sdir.GetFile(ManifestUtils.MANIFEST_FILE_NAME))
                                {
                                    if (mf == null)
                                    {
                                        output.Add(new MetabaseValidationMsg(MetabaseValidationMessageType.Error, this, null,
                                                                             StringConsts.METABASE_BIN_PACKAGE_MISSING_MANIFEST_ERROR
                                                                             .Args(sdn, ManifestUtils.MANIFEST_FILE_NAME), null)
                                                   );
                                        continue;
                                    }

                                    var manifest = LaconicConfiguration.CreateFromString(mf.ReadAllText()).Root;
                                    var computed = ManifestUtils.GeneratePackagingManifest(sdir);

                                    if (!ManifestUtils.HasTheSameContent(manifest, computed, oneWay: false))
                                    {
                                        output.Add(new MetabaseValidationMsg(MetabaseValidationMessageType.Error, this, null,
                                                                             StringConsts.METABASE_BIN_PACKAGE_OUTDATED_MANIFEST_ERROR
                                                                             .Args(sdn, ManifestUtils.MANIFEST_FILE_NAME), null)
                                                   );
                                    }
                                }
                        }

                        return(true);
                    }
                                                            );
                                      }
                                      catch (Exception error)
                                      {
                                          output.Add(new MetabaseValidationMsg(MetabaseValidationMessageType.Error, this, null, error.ToMessageWithType(), error));
                                          return;
                                      }
                                  }
Exemple #22
0
        public static void TestContractB_4_Parallel_ManyClients(string CONF_SRC, bool threadSafe)
        {
            const int CNT   = 10000;
            const int CLCNT = 157;

            var conf = LaconicConfiguration.CreateFromString(CONF_SRC);

            using (var app = new ServiceBaseApplication(null, conf.Root))
            {
                var rnd      = new Random();
                var rndBound = (int)(CLCNT * 1.3751d);
                var clients  = new List <TestContractBClient>();

                for (var i = 0; i < CLCNT; i++)
                {
                    var cl = new TestContractBClient(App.ConfigRoot.AttrByName(threadSafe?"cs":"cs2").Value);
                    Assert.AreEqual("Felix1223", cl.GetName(1223));//alloc server
                    clients.Add(cl);
                }


                var set   = new HashSet <int>();
                var watch = System.Diagnostics.Stopwatch.StartNew();

                //.....for making many parallel calls
                System.Threading.Tasks.Parallel.For(0, CNT,
                                                    (i, loop) =>
                {
                    var id = System.Threading.Thread.CurrentThread.ManagedThreadId;

                    lock (set)
                        set.Add(id);

                    var idx = rnd.Next(rndBound);
                    if (idx >= clients.Count)
                    {
                        idx = clients.Count - 1;
                    }
                    var cl = clients[idx];

                    //Testing overloaded calls
                    Assert.AreEqual("Felix{0}".Args(i), cl.GetName(i));
                });
                var elps = watch.ElapsedMilliseconds;

                Console.WriteLine("Parallel Many Clients Glue test made {0} calls in {1} ms at {2} call/sec and was done by these threads:".Args(CNT, elps, CNT / (elps / 1000d)));
                dumpBindingTransports(App.Glue.Bindings.First());
                var cnt = 0;
                foreach (var id in set)
                {
                    Console.Write(id + ", ");
                    cnt++;
                }
                Console.WriteLine(cnt + " total");
            }
        }
Exemple #23
0
        /// <summary>
        /// Returns this object as a config tree
        /// </summary>
        public ConfigSectionNode ToConfigNode(string rootName = null)
        {
            var mc = new LaconicConfiguration();

            mc.Create(rootName ?? GetType().Name);

            buildNode(mc.Root, this);

            return(mc.Root);
        }
Exemple #24
0
        public void Test_01()
        {
            var c1  = LaconicConfiguration.CreateFromString("root{ a=12  b=25 }");
            var txt = c1.SaveToString();
            var c2  = LaconicConfiguration.CreateFromString(txt);

            Aver.AreEqual(2, c2.Root.AttrCount);
            Aver.AreEqual(0, c2.Root.ChildCount);
            Aver.AreEqual("12", c2.Root.AttrByName("a").Value);
            Aver.AreEqual("25", c2.Root.AttrByName("b").Value);
        }
Exemple #25
0
        public void CSVFileDestinationStartByLaConfig()
        {
            string       TNAME = "UnitTest-" + MethodInfo.GetCurrentMethod().Name;
            string       FNAME = TNAME + ".csv.log";
            const string DATE  = "20131012";

            var laStr = @"log 
                        {{ 
                          destination 
                          {{ 
                            type='NFX.Log.Destinations.CSVFileDestination, NFX' 
                            name='{0}'
                            filename='$(@~path)$(::now fmt=yyyyMMdd value={1})-$($name).csv.log'
                          }} 
                        }}".Args(TNAME, DATE);

            var cnf = LaconicConfiguration.CreateFromString(laStr);

            cnf.EnvironmentVarResolver = new Vars()
            {
                { "path", TEST_DIR }
            };

            string fname = Path.Combine(TEST_DIR, DATE + "-" + FNAME);

            IOMiscUtils.EnsureFileEventuallyDeleted(fname);

            var logService = new LSVC(null);

            using (Scope.OnExit(() => File.Delete(fname)))
            {
                logService.Configure(cnf.Root);

                logService.Start();

                logService.Write(new Message()
                {
                    Text = "Msg 1"
                });
                logService.Write(new Message()
                {
                    Text = "Msg 2"
                });
                logService.Write(new Message()
                {
                    Text = "Msg 3"
                });

                logService.WaitForCompleteStop();

                Assert.IsTrue(File.Exists(fname));
                Assert.AreEqual(3, File.ReadAllLines(fname).Length);
            }
        }
    private static void inheritAttribute(FieldAttribute parent, FieldAttribute self, string callSite)
    {
      //merge attributes from parent into self prop by prop
      foreach(var pi in ALL_PROPS)
      {
        if (pi.Name==nameof(MetadataContent))
        {
          if (self.MetadataContent.IsNullOrWhiteSpace())
            self.MetadataContent = parent.MetadataContent;
          else if (parent.MetadataContent.IsNotNullOrWhiteSpace())
          { //merge
            var conf1 = ParseMetadataContent(parent.MetadataContent, callSite);
            var conf2 = ParseMetadataContent(self.MetadataContent, callSite);

            var merged = new LaconicConfiguration();
            merged.CreateFromMerge(conf1, conf2);
            self.MetadataContent = merged.SaveToString();
          }

          continue;
        }//metadata merge

        if (pi.Name==nameof(ValueList))
        {
          if (!self.HasValueList)
            self.ValueList = parent.ValueList;
          else if (parent.HasValueList)
          { //merge
            var vl1 = parent.ParseValueList(true);
            var vl2 = self.ParseValueList(true);

            vl2.Append(vl1);//merge missing in self from parent



            //remove all that start with REMOVE
            // to remove a key include an override with:  `keyABC: #del#` (item keyed on `keyABC` will be removed)
            const string DELETE = "#del#";
            vl2.Where(kvp => kvp.Value.AsString().EqualsOrdIgnoreCase(DELETE))
               .ToArray()
               .ForEach( kvp => vl2.Remove(kvp.Key) );

            self.ValueList = BuildValueListString(vl2);//reconstitute jsonmap back into string
          }

          continue;
        }

        if (self.PropertyWasAssigned(pi.Name)) continue;//was overridden
        pi.SetValue(self, pi.GetValue(parent));//set value
      }
    }
Exemple #27
0
        public void Test_03()
        {
            var c1  = LaconicConfiguration.CreateFromString("root{ a='000 120'  b=0-25 c{ d='snake    land'} }");
            var txt = c1.SaveToString();
            var c2  = LaconicConfiguration.CreateFromString(txt);

            Aver.AreEqual(2, c2.Root.AttrCount);
            Aver.AreEqual(1, c2.Root.ChildCount);
            Aver.AreEqual("000 120", c2.Root.AttrByName("a").Value);
            Aver.AreEqual("0-25", c2.Root.AttrByName("b").Value);

            Aver.AreEqual("snake    land", c2.Root["c"].AttrByName("d").Value);
        }
Exemple #28
0
        public static void TestContractB_3(string CONF_SRC)
        {
            var conf = LaconicConfiguration.CreateFromString(CONF_SRC);

            using (var app = new ServiceBaseApplication(null, conf.Root))
            {
                var cl = new TestContractBClient(App.ConfigRoot.AttrByName("cs").Value);

                Assert.AreEqual("Felix", cl.GetName());

                dumpBindingTransports(cl.Binding);
            }
        }
Exemple #29
0
        public void StartFinish()
        {
            var confSource = @" app{  starters{ starter{ type='Azos.Tests.Unit.AppModel.MySuperStarter, Azos.Tests.Unit'} }    }";

            RESULT = "";
            var conf = LaconicConfiguration.CreateFromString(confSource);

            using (var app = new AzosApplication(null, conf.Root))
            {
            }

            Aver.AreEqual("ABCD", RESULT);
        }
Exemple #30
0
        public void StartFinish()
        {
            var confSource = @" nfx{  starters{ starter{ type='NFX.UTest.AppModel.MySuperStarter, NFX.UTest'} }    }";

            RESULT = "";
            var conf = LaconicConfiguration.CreateFromString(confSource);

            using (var app = new ServiceBaseApplication(null, conf.Root))
            {
            }

            Aver.AreEqual("ABCD", RESULT);
        }