Skip to content

Commit 43c036d

Browse files
committed
[test] Added testing for Fuzzer
1 parent b82771e commit 43c036d

File tree

14 files changed

+501
-183
lines changed

14 files changed

+501
-183
lines changed
+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
namespace VSharp.CSharpUtils;
2+
3+
public static class DotnetExecutablePath
4+
{
5+
public static string ExecutablePath { get; private set; } = "dotnet";
6+
7+
public static void OverridePath(string newPath)
8+
{
9+
ExecutablePath = newPath;
10+
}
11+
}

VSharp.CoverageRunner/CoverageRunner.cs

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.Reflection;
33
using System.Runtime.InteropServices;
44
using System.Text;
5+
using VSharp.CSharpUtils;
56

67
namespace VSharp.CoverageRunner
78
{
@@ -81,7 +82,7 @@ private static bool StartCoverageTool(string args, DirectoryInfo workingDirector
8182
["COVERAGE_INSTRUMENT_MAIN_ONLY"] = "1"
8283
},
8384
WorkingDirectory = workingDirectory.FullName,
84-
FileName = "dotnet",
85+
FileName = DotnetExecutablePath.ExecutablePath,
8586
Arguments = args
8687
};
8788

VSharp.Fuzzer/Application.fs

+4-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,10 @@ type internal Application (fuzzerOptions: Startup.FuzzerOptions) =
3434
try
3535
failIfNull assembly "onFuzz called before assembly initialization"
3636

37-
let methodBase = Reflection.resolveMethodBaseFromAssembly assembly moduleName methodToken
37+
let methodBase =
38+
Reflection.resolveMethodBaseFromAssembly assembly moduleName methodToken
39+
|> AssemblyManager.NormalizeMethod
40+
3841
traceFuzzing $"Resolved MethodBase {methodToken}"
3942

4043
let method = Application.getMethod methodBase

VSharp.Fuzzer/Communication.fs

+4-3
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ module Contracts =
4343

4444
[<DataContract; CLIMutable>]
4545
type ExecutionData = {
46-
[<DataMember(Order = 1)>] moduleName: string
46+
[<DataMember(Order = 1)>] moduleName: string
4747
[<DataMember(Order = 2)>] methodId: int
4848
[<DataMember(Order = 3)>] threadId: int
4949
[<DataMember(Order = 4)>] fuzzerSeed: int
@@ -57,7 +57,7 @@ module Contracts =
5757

5858
[<DataContract; CLIMutable>]
5959
type FuzzingData = {
60-
[<DataMember(Order = 1)>] moduleName: string
60+
[<DataMember(Order = 1)>] moduleName: string
6161
[<DataMember(Order = 2)>] methodId: int
6262
}
6363

@@ -82,6 +82,7 @@ module private Grpc =
8282
let runGrpcServer<'service when 'service: not struct> port (service: 'service) token =
8383
WebHost
8484
.CreateDefaultBuilder()
85+
.UseSetting(WebHostDefaults.SuppressStatusMessagesKey, "True")
8586
.ConfigureKestrel(fun options ->
8687
options.ListenLocalhost(port, fun listenOptions ->
8788
listenOptions.Protocols <- HttpProtocols.Http2
@@ -155,7 +156,7 @@ let private masterProcessPort = 10043
155156
let connectFuzzerService () = Grpc.runGrpcClient<Contracts.IFuzzerService> fuzzerPort
156157
let connectMasterProcessService () = Grpc.runGrpcClient<Contracts.IMasterProcessService> masterProcessPort
157158

158-
let private waitTimeout = 1000000
159+
let private waitTimeout = 30000
159160
let private waitServiceForReady wait =
160161
let tokenSource = new CancellationTokenSource()
161162
let mutable callOptions = CallOptions().WithWaitForReady(true).WithCancellationToken(tokenSource.Token)

VSharp.Fuzzer/Fuzzer.fs

+5-6
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ type internal Fuzzer(
7070
Returned returned
7171
with
7272
| :? TargetInvocationException as e ->
73-
Thrown e
73+
Thrown e.InnerException
7474

7575
let fuzzOnce method (generationDatas: GenerationData[]) (results: InvocationResult[]) i threadId =
7676
fun () ->
@@ -139,8 +139,7 @@ type internal Fuzzer(
139139

140140
let mainMethod =
141141
methods
142-
|> Seq.find (fun x -> int x.Value.methodToken = method.MetadataToken )
143-
142+
|> Seq.find (fun x -> int x.Value.methodToken = method.MetadataToken)
144143

145144
let filteredLocations =
146145
coverageReport.rawCoverageLocations
@@ -166,7 +165,7 @@ type internal Fuzzer(
166165
Task.Run(fun () ->
167166
test.Serialize(testPath)
168167
infoFuzzing $"Generated test: {testPath}"
169-
).ForgetUntilExecutionRequested() // TODO: Maybe just serialize after finished?
168+
).ForgetUntilExecutionRequested()
170169
infoFuzzing "Test will be generated"
171170
| None ->
172171
infoFuzzing "Failed to create test"
@@ -184,7 +183,7 @@ type internal Fuzzer(
184183
let rawCoverage = coverageTool.GetRawHistory()
185184
traceFuzzing "Coverage received"
186185
let coverages = CoverageDeserializer.getRawReports rawCoverage
187-
traceFuzzing "Coverage deserialized"
186+
traceFuzzing $"Coverage reports[{coverages.reports.Length}] deserialized"
188187
assert (coverages.reports.Length = batchSize)
189188
let coverages = {
190189
methods = coverages.methods
@@ -205,7 +204,7 @@ type internal Fuzzer(
205204
abortedCount <- abortedCount + 1
206205
traceFuzzing "Aborted"
207206
| _ ->
208-
traceFuzzing "Invoked"
207+
traceFuzzing $"Invoked"
209208
assert(not <| Utils.isNull invocationResult)
210209
// TODO: send batches
211210
do! onCollected coverages.methods coverage generationData invocationResult

0 commit comments

Comments
 (0)