-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy pathRealTimeTestRunner.cs
More file actions
143 lines (123 loc) · 5.83 KB
/
RealTimeTestRunner.cs
File metadata and controls
143 lines (123 loc) · 5.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
using Oracle.ManagedDataAccess.Client;
using System;
using System.Data;
using System.Diagnostics;
using System.IO;
using System.Xml.Serialization;
namespace utPLSQL
{
public class RealTimeTestRunner : TestRunner<@event>
{
public override void RunTests(string type, string owner, string name, string procedure)
{
string testsToRun = GetTestsToRun(type, owner, name, procedure);
if (testsToRun != null)
{
realtimeReporterId = Guid.NewGuid().ToString().Replace("-", "");
string proc = @"DECLARE
l_reporter ut_realtime_reporter := ut_realtime_reporter();
BEGIN
l_reporter.set_reporter_id(:id);
l_reporter.output_buffer.init();
ut_runner.run(a_paths => ut_varchar2_list(:test), a_reporters => ut_reporters(l_reporter));
END;";
OracleCommand cmd = new OracleCommand(proc, produceConnection);
cmd.Parameters.Add("id", OracleDbType.Varchar2, ParameterDirection.Input).Value = realtimeReporterId;
cmd.Parameters.Add("test", OracleDbType.Varchar2, ParameterDirection.Input).Value = testsToRun;
cmd.ExecuteNonQuery();
}
}
public override void RunTestsWithCoverage(string type, string owner, string name, string procedure, string coverageSchemas, string includeObjects, string excludeObjects)
{
string testsToRun = GetTestsToRun(type, owner, name, procedure);
if (testsToRun != null)
{
realtimeReporterId = Guid.NewGuid().ToString().Replace("-", "");
coverageReporterId = Guid.NewGuid().ToString().Replace("-", "");
string proc = @"DECLARE
l_rt_rep ut_realtime_reporter := ut_realtime_reporter();
l_cov_rep ut_coverage_html_reporter := ut_coverage_html_reporter();
BEGIN
l_rt_rep.set_reporter_id(:id);
l_rt_rep.output_buffer.init();
l_cov_rep.set_reporter_id(:coverage_id);
l_cov_rep.output_buffer.init();
sys.dbms_output.enable(NULL);
ut_runner.run(a_paths => ut_varchar2_list(:test), ";
if (!String.IsNullOrWhiteSpace(coverageSchemas))
{
proc += $"a_coverage_schemes => ut_varchar2_list({coverageSchemas}), ";
}
if (!String.IsNullOrWhiteSpace(includeObjects))
{
proc += $"a_include_objects => ut_varchar2_list({includeObjects}), ";
}
if (!String.IsNullOrWhiteSpace(excludeObjects))
{
proc += $"a_exclude_objects => ut_varchar2_list({excludeObjects}), ";
}
proc += "a_reporters => ut_reporters(l_rt_rep, l_cov_rep)); " +
"sys.dbms_output.disable; " +
"END;";
OracleCommand cmd = new OracleCommand(proc, produceConnection);
cmd.Parameters.Add("id", OracleDbType.Varchar2, ParameterDirection.Input).Value = realtimeReporterId;
cmd.Parameters.Add("coverage_id", OracleDbType.Varchar2, ParameterDirection.Input).Value = coverageReporterId;
cmd.Parameters.Add("test", OracleDbType.Varchar2, ParameterDirection.Input).Value = testsToRun;
try
{
cmd.ExecuteNonQuery();
}
catch (Exception e)
{
using (EventLog eventLog = new EventLog("Application"))
{
eventLog.WriteEntry($"{e.Message} {e.StackTrace}", EventLogEntryType.Error, 0);
}
}
}
}
public override void ConsumeResult(Action<@event> action)
{
string proc = @"DECLARE
l_reporter ut_realtime_reporter := ut_realtime_reporter();
BEGIN
l_reporter.set_reporter_id(:id);
:lines_cursor := l_reporter.get_lines_cursor();
END;";
OracleCommand cmd = new OracleCommand(proc, consumeConnection);
cmd.Parameters.Add("id", OracleDbType.Varchar2, ParameterDirection.Input).Value = realtimeReporterId;
cmd.Parameters.Add("lines_cursor", OracleDbType.RefCursor, ParameterDirection.Output);
cmd.InitialLOBFetchSize = -1;
OracleDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
string xml = reader.GetString(0);
var serializer = new XmlSerializer(typeof(@event));
var @event = (@event)serializer.Deserialize(new StringReader(xml));
action.Invoke(@event);
}
reader.Close();
}
private static string GetTestsToRun(string type, string owner, string name, string procedure)
{
string testsToRun = null;
if (type.Equals(USER))
{
testsToRun = name;
}
else if (type.Equals(PACKAGE))
{
testsToRun = $"{owner}.{name}";
}
else if (type.Equals(PROCEDURE))
{
testsToRun = $"{owner}.{name}.{procedure}";
}
else if (type.Equals(ALL))
{
testsToRun = owner;
}
return testsToRun;
}
}
}