public async void RunScript_ReadsDataFromInputStream() { var lf = TestLoggerFactory.Create(); var script = @"$Input | ForEach { Write-Output $_ }"; var expected = new[] { 32, 120, 71, 89, 20 }; var input = new PSDataCollection <PSObject>(5); _ = Task.Run( () => { foreach (var num in expected) { input.Add(num); Thread.Sleep(num); } input.Complete(); } ); var result = await PwshRunner.RunScript(script, lf.CreateLogger("Test"), null, input); var actual = result.Select(o => (int)o.BaseObject).ToArray(); Assert.Equal(expected, actual); }
public async void RunScriptAsync_CorrectlyPassesVariablesToScript() { var lf = TestLoggerFactory.Create(); var script = @"1..6 | % { Write-Output (Get-Variable -Name ""Var$_"").Value }"; var entity = Entity.Create( ("Var1", "value1"), ("Var2", 2), ("Var3", 3.3), ("Var4", true), ("Var5", Core.SCLType.Enum), ("Var6", new DateTime(2020, 12, 12)) ); var result = await PwshRunner.RunScriptAsync(script, lf.CreateLogger("Test"), entity, null) .ToListAsync(); for (var i = 0; i < entity.Dictionary.Count; i++) { Assert.Equal( entity.Dictionary[$"Var{i + 1}"].BestValue.ObjectValue, result[i].BaseObject ); } }
public void ProcessData_WhenSenderIsNotPSDataCollection_Throws() { var sender = new PSDataCollection <object>(); Assert.Throws <ArgumentException>( () => PwshRunner.ProcessData <PSObject>(sender, 0, _ => { }) ); }
public async void RunScript_ReadsDataFromOutputStream() { var logger = TestLoggerFactory.Create().CreateLogger("Test"); var script = @"Write-Output 'one'; Write-Output 2"; var result = await PwshRunner.RunScript(script, logger); Assert.Equal(new List <PSObject> { "one", 2 }, result); }
public void ProcessData_WhenSenderIsPSDataCollection_InvokesAction() { var sender = new PSDataCollection <object>(); var str = ""; var mock = new Mock <Action <object> >(); sender.Add(str); PwshRunner.ProcessData <object>(sender, 0, mock.Object); mock.Verify(m => m.Invoke(str)); }
public void EntityFromPSObject_WhenBaseObjectIsNotPSO_ReturnsSingleValueEntity(object expected) { var pso = new PSObject(expected); var entity = PwshRunner.EntityFromPSObject(pso); Assert.NotNull(entity); var val = entity.TryGetValue(Entity.PrimitiveKey).Value.ObjectValue; Assert.Equal(expected, val); }
public void ProcessData_WhenSenderIsPSDataCollection_RemovesItemFromCollection() { var sender = new PSDataCollection <string>(); var expected = "string0"; sender.Add(expected); sender.Add("string1"); PwshRunner.ProcessData <string>(sender, 0, o => { }); Assert.Single(sender); Assert.DoesNotContain(sender, o => expected.Equals(o)); }
public async void RunScript_LogsErrorsWarningsAndInformation() { var lf = TestLoggerFactory.Create(); var script = @"Write-Output 'one'; Write-Error 'error'; Write-Output 'two'; Write-Warning 'warning'; Write-Information 'info'"; _ = await PwshRunner.RunScript(script, lf.CreateLogger("Test")); Assert.Equal(3, lf.Sink.LogEntries.Count()); Assert.Contains(lf.Sink.LogEntries, o => o.Message != null && o.Message.Equals("error")); Assert.Contains(lf.Sink.LogEntries, o => o.Message != null && o.Message.Equals("warning")); Assert.Contains(lf.Sink.LogEntries, o => o.Message != null && o.Message.Equals("info")); }
public void EntityFromPSObject_WhenBaseObjectIsArray_ReturnsEntity() { var arr = new object[] { "value1", 2 }; var pso = new PSObject(arr); var entity = PwshRunner.EntityFromPSObject(pso); Assert.NotNull(entity); var actual = entity.Dictionary[Entity.PrimitiveKey].BestValue.ObjectValue as ImmutableList <EntityValue>; Assert.Equal(arr[0], actual ![0].ObjectValue);
public async void EntityFromPSObject_WhenBaseObjectIsHashtable_ReturnsEntity_Integration() { var lf = TestLoggerFactory.Create(); var script = @"@{prop1 = 'value1'; prop2 = 2} | Write-Output"; var result = await PwshRunner.GetEntityEnumerable(script, lf.CreateLogger("Test")) .ToListAsync(); Assert.Single(result); var val1 = result[0].TryGetValue("prop1").Map(x => x.GetPrimitiveString()); var val2 = result[0].TryGetValue("prop2").Map(x => x.ObjectValue); Assert.Equal("value1", val1); Assert.Equal(2, val2); }
public void EntityFromPSObject_WhenBaseObjectIsHashtable_ReturnsEntity() { var pso = new PSObject(new Hashtable { { "prop1", "value1" }, { "prop2", 2 } }); var entity = PwshRunner.EntityFromPSObject(pso); Assert.NotNull(entity); var val1 = entity.TryGetValue("prop1").Map(x => x.GetPrimitiveString()); var val2 = entity.TryGetValue("prop2").Map(x => x.ObjectValue); Assert.Equal(2, entity.Count()); Assert.Equal("value1", val1); Assert.Equal(2, val2); }
public void EntityFromPSObject_WhenBaseObjectIsPSO_ReturnsMultiValueEntity() { var pso = new PSObject(); pso.Properties.Add(new PSNoteProperty("prop1", "value1")); pso.Properties.Add(new PSNoteProperty("prop2", "value2")); var entity = PwshRunner.EntityFromPSObject(pso); Assert.NotNull(entity); var val1 = entity.TryGetValue("prop1").Map(x => x.GetPrimitiveString()); var val2 = entity.TryGetValue("prop2").Map(x => x.GetPrimitiveString()); Assert.Equal(2, entity.Count()); Assert.Equal("value1", val1 !.ToString()); Assert.Equal("value2", val2 !.ToString()); }