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); } }
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)); } }
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; }
/// <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); }
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); } }
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); } }
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); } }
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"); } }
//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")); } }
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); } }
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); } } }
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")); } }
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); } }
public override string Execute() { var conf = new LaconicConfiguration(); conf.CreateFromNode(App.ConfigRoot); return(conf.SaveToString()); }
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); } } }
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); } }
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); } }
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); }
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); }
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; } }
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"); } }
/// <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); }
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); }
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 } }
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); }
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); } }
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); }
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); }