Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -18,16 +18,15 @@ class CSharp2CpgHTTPServerTests extends CSharpCode2CpgFixture with BeforeAndAfte

private var port: Int = -1

private def newProjectUnderTest(index: Option[Int] = None): Path = {
val dir = Files.createTempDirectory("csharp2cpgTestsHttpTest")
val file = dir / "main.cs"
file.createWithParentsIfNotExists(createParents = true)
val indexStr = index.map(_.toString).getOrElse("")
val content = basicBoilerplate(s"Console.WriteLine($indexStr);")
Files.writeString(file, content)
FileUtil.deleteOnExit(file)
FileUtil.deleteOnExit(dir)
dir
private def usingProjectUnderTest[T](index: Option[Int] = None)(f: Path => T): T = {
FileUtil.usingTemporaryDirectory("csharp2cpgTestsHttpTest") { dir =>
val file = dir / "main.cs"
file.createWithParentsIfNotExists(createParents = true)
val indexStr = index.map(_.toString).getOrElse("")
val content = basicBoilerplate(s"Console.WriteLine($indexStr);")
Files.writeString(file, content)
f(dir)
}
}

override def beforeAll(): Unit = {
Expand All @@ -40,39 +39,41 @@ class CSharp2CpgHTTPServerTests extends CSharpCode2CpgFixture with BeforeAndAfte

"Using csharp2cpg in server mode" should {
"build CPGs correctly (single test)" in {
val cpgOutFile = FileUtil.newTemporaryFile("csharp2cpg.bin")
FileUtil.deleteOnExit(cpgOutFile)
val projectUnderTest = newProjectUnderTest()
val input = projectUnderTest.toAbsolutePath.toString
val output = cpgOutFile.toString
val client = FrontendHTTPClient(port)
val req = client.buildRequest(Array(s"input=$input", s"output=$output"))
client.sendRequest(req) match {
case Failure(exception) => fail(exception.getMessage)
case Success(out) =>
out shouldBe output
val cpg = CpgLoader.load(output)
cpg.method.name.l should contain("Main")
cpg.call.code.l shouldBe List("Console.WriteLine()")
FileUtil.usingTemporaryFile(suffix = "csharp2cpg.bin") { cpgOutFile =>
usingProjectUnderTest() { projectUnderTest =>
val input = projectUnderTest.toAbsolutePath.toString
val output = cpgOutFile.toString
val client = FrontendHTTPClient(port)
val req = client.buildRequest(Array(s"input=$input", s"output=$output"))
client.sendRequest(req) match {
case Failure(exception) => fail(exception.getMessage)
case Success(out) =>
out shouldBe output
val cpg = CpgLoader.load(output)
cpg.method.name.l should contain("Main")
cpg.call.code.l shouldBe List("Console.WriteLine()")
}
}
}
}

"build CPGs correctly (multi-threaded test)" in {
(0 until 10).par.foreach { index =>
val cpgOutFile = FileUtil.newTemporaryFile("csharp2cpg.bin")
FileUtil.deleteOnExit(cpgOutFile)
val projectUnderTest = newProjectUnderTest(Some(index))
val input = projectUnderTest.toAbsolutePath.toString
val output = cpgOutFile.toString
val client = FrontendHTTPClient(port)
val req = client.buildRequest(Array(s"input=$input", s"output=$output"))
client.sendRequest(req) match {
case Failure(exception) => fail(exception.getMessage)
case Success(out) =>
out shouldBe output
val cpg = CpgLoader.load(output)
cpg.method.name.l should contain("Main")
cpg.call.code.l shouldBe List(s"Console.WriteLine($index)")
FileUtil.usingTemporaryFile(suffix = "csharp2cpg.bin") { cpgOutFile =>
usingProjectUnderTest(Some(index)) { projectUnderTest =>
val input = projectUnderTest.toAbsolutePath.toString
val output = cpgOutFile.toString
val client = FrontendHTTPClient(port)
val req = client.buildRequest(Array(s"input=$input", s"output=$output"))
client.sendRequest(req) match {
case Failure(exception) => fail(exception.getMessage)
case Success(out) =>
out shouldBe output
val cpg = CpgLoader.load(output)
cpg.method.name.l should contain("Main")
cpg.call.code.l shouldBe List(s"Console.WriteLine($index)")
}
}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,13 +85,10 @@ trait CSharpFrontend extends LanguageFrontend {
.getOrElse(Config().withSchemaValidation(ValidationMode.Enabled))

override def execute(sourceCodeFile: File): Cpg = {
val cpgOutFile = FileUtil.newTemporaryFile(suffix = "cpg.bin")
FileUtil.deleteOnExit(cpgOutFile)
val config = defaultConfig.withInputPath(sourceCodeFile.getAbsolutePath).withOutputPath(cpgOutFile.toString)
val config = defaultConfig.withInputPath(sourceCodeFile.getAbsolutePath)
val tmp = new CSharpSrc2Cpg().createCpg(config).get
new PostFrontendValidator(tmp, false).createAndApply()
tmp

}

}