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 @@ -2,7 +2,6 @@

import com.netflix.nebula.archrules.core.ArchRulesService;
import com.netflix.nebula.archrules.core.Runner;
import com.tngtech.archunit.core.importer.ClassFileImporter;
import com.tngtech.archunit.core.importer.ClassFileImporterWithPackage;
import com.tngtech.archunit.lang.Priority;
import org.gradle.workers.WorkAction;
Expand All @@ -11,9 +10,6 @@
import org.slf4j.LoggerFactory;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
Expand Down Expand Up @@ -105,17 +101,6 @@ public void execute() {
}
});

try (var out = new ObjectOutputStream(new FileOutputStream(getParameters().getDataOutputFile().get()))) {
out.writeInt(violationList.size());
violationList.forEach((v) -> {
try {
out.writeObject(v);
} catch (IOException e) {
throw new RuntimeException(e);
}
});
} catch (IOException e) {
throw new RuntimeException(e);
}
ViolationsUtil.writeDetails(getParameters().getDataOutputFile().get(), violationList);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,22 @@ package com.netflix.nebula.archrules.gradle

import com.tngtech.archunit.lang.Priority
import org.gradle.internal.logging.text.StyledTextOutput
import org.slf4j.Logger
import org.slf4j.LoggerFactory
import java.io.File
import java.io.FileInputStream
import java.io.FileOutputStream
import java.io.IOException
import java.io.ObjectInputStream
import java.io.ObjectOutputStream

/**
* Helpers for dealing with [RuleResult]
*/
class ViolationsUtil {
companion object {
val log: Logger = LoggerFactory.getLogger(ViolationsUtil::class.java)

@JvmStatic
fun readDetails(dataFile: File): List<RuleResult> {
val list: MutableList<RuleResult> = mutableListOf()
Expand All @@ -23,18 +29,30 @@ class ViolationsUtil {
}
}
} catch (e: IOException) {
throw RuntimeException(e)
log.warn("Archrules data read failed for {}", dataFile.absolutePath, e)
} catch (e: ClassNotFoundException) {
throw RuntimeException(e)
}
return list
}

@JvmStatic
fun printReport(violations: Map<Rule, List<RuleResult>>,
output: StyledTextOutput,
priorityThreshold: Priority?,
infoLogging: Boolean) {
fun writeDetails(dataFile: File, violationList : List<RuleResult>) {
ObjectOutputStream(FileOutputStream(dataFile)).use { out ->
out.writeInt(violationList.size)
violationList.forEach {
out.writeObject(it);
}
}
}

@JvmStatic
fun printReport(
violations: Map<Rule, List<RuleResult>>,
output: StyledTextOutput,
priorityThreshold: Priority?,
infoLogging: Boolean
) {
output.style(StyledTextOutput.Style.Header).println("ArchRule Violation Details:")
violations
.mapValues { it.value.filter { it.rule().priority().meetsThreshold(priorityThreshold) || infoLogging } }
Expand All @@ -59,7 +77,12 @@ class ViolationsUtil {
}

@JvmStatic
fun printSummary(resultMap: Map<Rule, List<RuleResult>>, output: StyledTextOutput, skipPassing: Boolean, infoLogging: Boolean) {
fun printSummary(
resultMap: Map<Rule, List<RuleResult>>,
output: StyledTextOutput,
skipPassing: Boolean,
infoLogging: Boolean
) {
output.style(StyledTextOutput.Style.Header).println("ArchRule Summary:")
val indent = 4
val maxRuleNameLength = resultMap.keys.maxOfOrNull { it.ruleName().length } ?: 1
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,22 @@ import com.tngtech.archunit.lang.Priority
import org.assertj.core.api.Assertions.assertThat
import org.gradle.internal.logging.text.StyledTextOutput
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.io.TempDir
import java.io.File

internal class ViolationsUtilTest {
@TempDir
lateinit var tempDir: File

@Test
fun `test serialization`() {
val rule = Rule("RuleClass", "RuleName", "description", Priority.MEDIUM)
val results = listOf(RuleResult(rule, "message", RuleResultStatus.PASS))
val dataFile = tempDir.resolve("test.data")
ViolationsUtil.writeDetails(dataFile, results)
val actual = ViolationsUtil.readDetails(dataFile)
assertThat(actual).containsExactlyElementsOf(results)
}

@Test
fun `test printSummary`() {
Expand Down