Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 05c9170

Browse filesBrowse files
committed
Merge branch 'release/1.5.0' into main
2 parents 504c978 + c5473f7 commit 05c9170
Copy full SHA for 05c9170

File tree

7 files changed

+183
-108
lines changed
Filter options

7 files changed

+183
-108
lines changed

‎utPLSQL.Api/utPLSQL.Api.Test/RealTimeTestRunnerTest.cs

Copy file name to clipboardExpand all lines: utPLSQL.Api/utPLSQL.Api.Test/RealTimeTestRunnerTest.cs
+38-15
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,23 @@
11
using Microsoft.VisualStudio.TestTools.UnitTesting;
22
using Oracle.ManagedDataAccess.Client;
3+
using System;
34
using System.Collections.Generic;
45
using System.Linq;
6+
using System.Threading.Tasks;
57

68
namespace utPLSQL
79
{
810
[TestClass]
911
public class RealTimeTestRunnerTest
1012
{
1113
[TestMethod]
12-
public void TestRunTests()
14+
public async Task TestRunTests()
1315
{
1416
var testRunner = new RealTimeTestRunner();
1517
testRunner.Connect(username: "toscamtest", password: "toscamtest", database: "CA40");
1618

17-
testRunner.RunTests(paths: "toscamtest");
18-
1919
var events = new List<@event>();
20-
testRunner.ConsumeResult(@event =>
20+
await testRunner.RunTestsAsync("toscamtest", @event =>
2121
{
2222
events.Add(@event);
2323
});
@@ -27,25 +27,37 @@ public void TestRunTests()
2727
}
2828

2929
[TestMethod]
30-
public void TestRunTestsWithCoverage()
30+
public async Task TestConnectAsAsync()
3131
{
3232
var testRunner = new RealTimeTestRunner();
33-
testRunner.Connect(username: "toscamtest", password: "toscamtest", database: "CA40");
33+
testRunner.Connect(username: "sys", password: "Oradoc_db1", database: "ORCLPDB1", connectAs: "SYSDBA");
3434

35-
testRunner.RunTestsWithCoverage(path: "toscamtest", coverageSchema: "toscam",
36-
includeObjects: new List<string>() { "pa_m720", "pa_m770" });
35+
try
36+
{
37+
await testRunner.RunTestsAsync("toscamtest", @event => { });
3738

38-
var events = new List<@event>();
39-
testRunner.ConsumeResult(@event =>
39+
Assert.Fail();
40+
}
41+
catch (OracleException e)
4042
{
41-
events.Add(@event);
42-
});
43+
Assert.IsTrue(e.Message.StartsWith("ORA-06598"));
44+
}
45+
}
46+
47+
[TestMethod]
48+
public async Task TestRunTestsWithCoverageAsync()
49+
{
50+
var testRunner = new RealTimeTestRunner();
51+
testRunner.Connect(username: "toscamtest", password: "toscamtest", database: "CA40");
52+
53+
var events = new List<@event>();
54+
55+
string report = await testRunner.RunTestsWithCoverageAsync(path: "toscamtest", @event => { events.Add(@event); },
56+
coverageSchema: "toscam", includeObjects: new List<string>() { "pa_m720", "pa_m770" });
4357

4458
Assert.AreEqual("pre-run", events[0].type);
4559
Assert.AreEqual("post-run", events.Last().type);
4660

47-
var report = testRunner.GetCoverageReport();
48-
4961
System.Diagnostics.Trace.WriteLine(report);
5062
}
5163

@@ -56,11 +68,22 @@ public void TestRunTestsAndAbort()
5668
var testRunner = new RealTimeTestRunner();
5769
testRunner.Connect(username: "toscamtest", password: "toscamtest", database: "CA40");
5870

59-
testRunner.RunTests(paths: "toscamtest");
71+
testRunner.RunTestsAsync("toscamtest", @event => { });
6072

6173
testRunner.Close();
6274
}
6375

76+
[TestMethod]
77+
public async Task TestRunTestsTwoTimesAsync()
78+
{
79+
var testRunner = new RealTimeTestRunner();
80+
testRunner.Connect(username: "toscamtest", password: "toscamtest", database: "CA40");
81+
82+
testRunner.RunTestsAsync("toscamtest", @event => { });
83+
84+
await testRunner.RunTestsAsync("toscamtest", @event => { });
85+
}
86+
6487
[TestMethod]
6588
public void TestGetVersion()
6689
{

‎utPLSQL.Api/utPLSQL.Api/App.config

Copy file name to clipboardExpand all lines: utPLSQL.Api/utPLSQL.Api/App.config
+4-6
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
1-
<?xml version="1.0" encoding="utf-8"?>
1+
<?xml version="1.0" encoding="utf-8"?>
22
<configuration>
33
<configSections>
4-
<section name="oracle.manageddataaccess.client"
5-
type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.122.19.1, Culture=neutral, PublicKeyToken=89b483f429c47342"/>
4+
<section name="oracle.manageddataaccess.client" type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.122.19.1, Culture=neutral, PublicKeyToken=89b483f429c47342"/>
65
</configSections>
76
<system.data>
87
<DbProviderFactories>
98
<remove invariant="Oracle.ManagedDataAccess.Client"/>
10-
<add name="ODP.NET, Managed Driver" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET, Managed Driver"
11-
type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.122.19.1, Culture=neutral, PublicKeyToken=89b483f429c47342"/>
9+
<add name="ODP.NET, Managed Driver" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET, Managed Driver" type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.122.19.1, Culture=neutral, PublicKeyToken=89b483f429c47342"/>
1210
</DbProviderFactories>
1311
</system.data>
1412
<runtime>
@@ -27,4 +25,4 @@
2725
</dataSources>
2826
</version>
2927
</oracle.manageddataaccess.client>
30-
</configuration>
28+
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/></startup></configuration>

‎utPLSQL.Api/utPLSQL.Api/Properties/AssemblyInfo.cs

Copy file name to clipboardExpand all lines: utPLSQL.Api/utPLSQL.Api/Properties/AssemblyInfo.cs
+2-2
Original file line numberDiff line numberDiff line change
@@ -32,5 +32,5 @@
3232
// You can specify all the values or you can default the Build and Revision Numbers
3333
// by using the '*' as shown below:
3434
// [assembly: AssemblyVersion("1.0.*")]
35-
[assembly: AssemblyVersion("1.4.1.0")]
36-
[assembly: AssemblyFileVersion("1.4.1.0")]
35+
[assembly: AssemblyVersion("1.5.0.0")]
36+
[assembly: AssemblyFileVersion("1.5.0.0")]

‎utPLSQL.Api/utPLSQL.Api/RealTimeTestRunner.cs

Copy file name to clipboardExpand all lines: utPLSQL.Api/utPLSQL.Api/RealTimeTestRunner.cs
+79-44
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using System.Collections.Generic;
44
using System.Data;
55
using System.IO;
6+
using System.Threading.Tasks;
67
using System.Xml.Serialization;
78

89
namespace utPLSQL
@@ -12,39 +13,46 @@ namespace utPLSQL
1213
/// </summary>
1314
public class RealTimeTestRunner : TestRunner<@event>
1415
{
15-
public override void RunTests(params string[] paths)
16+
public override async Task RunTestsAsync(List<string> paths, Action<@event> consumer)
1617
{
17-
if (paths != null && paths.Length > 0)
18+
if (paths != null && paths.Count > 0)
1819
{
19-
realtimeReporterId = Guid.NewGuid().ToString().Replace("-", "");
20+
string realtimeReporterId = Guid.NewGuid().ToString().Replace("-", "");
2021

21-
var proc = $@"DECLARE
22-
l_reporter ut_realtime_reporter := ut_realtime_reporter();
23-
BEGIN
24-
l_reporter.set_reporter_id(:id);
25-
l_reporter.output_buffer.init();
26-
ut_runner.run(a_paths => ut_varchar2_list({ConvertToUtVarchar2List(new List<string>(paths))}),
27-
a_reporters => ut_reporters(l_reporter));
28-
END;";
29-
30-
var cmd = new OracleCommand(proc, produceConnection);
31-
runningCommands.Add(cmd);
32-
33-
cmd.Parameters.Add("id", OracleDbType.Varchar2, ParameterDirection.Input).Value = realtimeReporterId;
34-
cmd.ExecuteNonQuery();
22+
await UtRunAsync(realtimeReporterId, paths);
3523

36-
runningCommands.Remove(cmd);
37-
cmd.Dispose();
24+
await ConsumeResultAsync(realtimeReporterId, consumer);
3825
}
3926
}
4027

41-
public override void RunTestsWithCoverage(List<string> paths, List<string> coverageSchemas = null, List<string> includeObjects = null, List<string> excludeObjects = null)
28+
public override async Task RunTestsAsync(string path, Action<@event> consumer)
29+
{
30+
await RunTestsAsync(new List<string>() { path }, consumer);
31+
}
32+
33+
public override async Task<string> RunTestsWithCoverageAsync(List<string> paths, Action<@event> consumer, List<string> coverageSchemas = null, List<string> includeObjects = null, List<string> excludeObjects = null)
4234
{
4335
if (paths != null && paths.Count > 0)
4436
{
45-
realtimeReporterId = Guid.NewGuid().ToString().Replace("-", "");
46-
coverageReporterId = Guid.NewGuid().ToString().Replace("-", "");
37+
string realtimeReporterId = Guid.NewGuid().ToString().Replace("-", "");
38+
string coverageReporterId = Guid.NewGuid().ToString().Replace("-", "");
39+
40+
await UtRunWithCoverageAsync(realtimeReporterId, coverageReporterId, paths, coverageSchemas, includeObjects, excludeObjects);
41+
42+
await ConsumeResultAsync(realtimeReporterId, consumer);
43+
44+
return await GetCoverageReportAsync(coverageReporterId);
45+
}
46+
else
47+
{
48+
return null;
49+
}
50+
}
4751

52+
private async Task UtRunWithCoverageAsync(string realtimeReporterId, string coverageReporterId, List<string> paths, List<string> coverageSchemas, List<string> includeObjects, List<string> excludeObjects)
53+
{
54+
await Task.Run(() =>
55+
{
4856
var proc = $@"DECLARE
4957
l_rt_rep ut_realtime_reporter := ut_realtime_reporter();
5058
l_cov_rep ut_coverage_html_reporter := ut_coverage_html_reporter();
@@ -85,47 +93,74 @@ public override void RunTestsWithCoverage(List<string> paths, List<string> cover
8593

8694
runningCommands.Remove(cmd);
8795
cmd.Dispose();
88-
}
96+
});
8997
}
9098

91-
public override void RunTestsWithCoverage(string path, string coverageSchema = null, List<string> includeObjects = null, List<string> excludeObjects = null)
99+
public override async Task<string> RunTestsWithCoverageAsync(string path, Action<@event> consumer, string coverageSchema = null, List<string> includeObjects = null, List<string> excludeObjects = null)
92100
{
93-
this.RunTestsWithCoverage(new List<string>() { path }, new List<string>() { coverageSchema }, includeObjects, excludeObjects);
101+
return await RunTestsWithCoverageAsync(new List<string>() { path }, consumer, new List<string>() { coverageSchema }, includeObjects, excludeObjects);
94102
}
95103

96-
public override void ConsumeResult(Action<@event> action)
104+
private async Task UtRunAsync(string id, List<string> paths)
97105
{
98-
var proc = @"DECLARE
106+
await Task.Run(() =>
107+
{
108+
var proc = $@"DECLARE
109+
l_reporter ut_realtime_reporter := ut_realtime_reporter();
110+
BEGIN
111+
l_reporter.set_reporter_id(:id);
112+
l_reporter.output_buffer.init();
113+
ut_runner.run(a_paths => ut_varchar2_list({ConvertToUtVarchar2List(new List<string>(paths))}),
114+
a_reporters => ut_reporters(l_reporter));
115+
END;";
116+
117+
var cmd = new OracleCommand(proc, produceConnection);
118+
runningCommands.Add(cmd);
119+
120+
cmd.Parameters.Add("id", OracleDbType.Varchar2, ParameterDirection.Input).Value = id;
121+
cmd.ExecuteNonQuery();
122+
123+
runningCommands.Remove(cmd);
124+
cmd.Dispose();
125+
});
126+
}
127+
128+
private async Task ConsumeResultAsync(string id, Action<@event> action)
129+
{
130+
await Task.Run(() =>
131+
{
132+
var proc = @"DECLARE
99133
l_reporter ut_realtime_reporter := ut_realtime_reporter();
100134
BEGIN
101135
l_reporter.set_reporter_id(:id);
102136
:lines_cursor := l_reporter.get_lines_cursor();
103137
END;";
104138

105-
var cmd = new OracleCommand(proc, consumeConnection);
106-
runningCommands.Add(cmd);
139+
var cmd = new OracleCommand(proc, consumeConnection);
140+
runningCommands.Add(cmd);
107141

108-
cmd.Parameters.Add("id", OracleDbType.Varchar2, ParameterDirection.Input).Value = realtimeReporterId;
109-
cmd.Parameters.Add("lines_cursor", OracleDbType.RefCursor, ParameterDirection.Output);
142+
cmd.Parameters.Add("id", OracleDbType.Varchar2, ParameterDirection.Input).Value = id;
143+
cmd.Parameters.Add("lines_cursor", OracleDbType.RefCursor, ParameterDirection.Output);
110144

111-
// https://stackoverflow.com/questions/2226769/bad-performance-with-oracledatareader
112-
cmd.InitialLOBFetchSize = -1;
145+
// https://stackoverflow.com/questions/2226769/bad-performance-with-oracledatareader
146+
cmd.InitialLOBFetchSize = -1;
113147

114-
var reader = cmd.ExecuteReader();
115-
while (reader.Read())
116-
{
117-
var xml = reader.GetString(0);
148+
var reader = cmd.ExecuteReader();
149+
while (reader.Read())
150+
{
151+
var xml = reader.GetString(0);
118152

119-
var serializer = new XmlSerializer(typeof(@event));
120-
var @event = (@event)serializer.Deserialize(new StringReader(xml));
153+
var serializer = new XmlSerializer(typeof(@event));
154+
var @event = (@event)serializer.Deserialize(new StringReader(xml));
121155

122-
action.Invoke(@event);
123-
}
156+
action.Invoke(@event);
157+
}
124158

125-
reader.Close();
159+
reader.Close();
126160

127-
runningCommands.Remove(cmd);
128-
cmd.Dispose();
161+
runningCommands.Remove(cmd);
162+
cmd.Dispose();
163+
});
129164
}
130165
}
131166
}

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.