Skip to content

Commit c5473f7

Browse files
committed
Migrated to Async API
1 parent 504c978 commit c5473f7

File tree

7 files changed

+183
-108
lines changed

7 files changed

+183
-108
lines changed

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

Lines changed: 38 additions & 15 deletions
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

Lines changed: 4 additions & 6 deletions
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

Lines changed: 2 additions & 2 deletions
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

Lines changed: 79 additions & 44 deletions
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)