Skip to content

Commit

Permalink
MID-8842 upgrade, getting rid of logback blackmagic in ninja logger, …
Browse files Browse the repository at this point in the history
…passing print streams properly also in tests. removing java 17 features (because of merge to support-4.4)
  • Loading branch information
1azyman committed Jun 21, 2023
1 parent 9d4d696 commit fd49f29
Show file tree
Hide file tree
Showing 16 changed files with 172 additions and 211 deletions.
8 changes: 0 additions & 8 deletions tools/ninja/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -201,14 +201,6 @@
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
</dependency>

<!-- TEST DEPENDENCIES -->
<dependency>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,23 @@ public class RunSqlOptions {

public enum Mode {

/**
* This will create raw datasource from JDBC url/username/password. Midpoint home doesn't have to be defined.
*/
RAW(Collections.emptyList(), Collections.emptyList()),

/**
* This mode will set up datasource based on midpoint home config.xml pointing to midpoint repository.
*/
REPOSITORY(
List.of(new File(SCRIPTS_DIRECTORY, "postgres-new.sql"),
new File(SCRIPTS_DIRECTORY, "postgres-new-quartz.sql")),
List.of(new File(SCRIPTS_DIRECTORY, "postgres-new-upgrade.sql"))
),

/**
* This mode will set up datasource based on midpoint home config.xml pointing to midpoint audit database.
*/
AUDIT(
List.of(new File(SCRIPTS_DIRECTORY, "postgres-new-audit.sql")),
List.of(new File(SCRIPTS_DIRECTORY, "postgres-new-upgrade-audit.sql"))
Expand All @@ -45,7 +54,11 @@ public enum Mode {
public static final String P_JDBC_USERNAME_LONG = "--jdbc-username";
public static final String P_JDBC_PASSWORD_LONG = "--jdbc-password";
public static final String P_MODE = "--mode";

// todo there should be upgrade-repository and upgrade-audit
public static final String P_UPGRADE = "--upgrade";

// todo there should be create-repository and create-audit
public static final String P_CREATE = "--create";
public static final String P_RESULT = "--result";

Expand Down Expand Up @@ -78,8 +91,6 @@ public enum Mode {
@Parameter(names = { P_RESULT }, descriptionKey = "runSql.result")
private boolean result;

private File scriptsDirectory;

public List<File> getScripts() {
return scripts;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ public enum ReportStyle {
CSV
}

static class ReportStyleConverter extends EnumConverterValidator<ReportStyle> {
public static class ReportStyleConverter extends EnumConverterValidator<ReportStyle> {

public ReportStyleConverter() {
super(VerifyOptions.ReportStyle.class);
Expand All @@ -42,7 +42,7 @@ public enum VerificationCategory {
INCORRECT_OIDS
}

static class VerificationCategoryConverter extends EnumConverterValidator<VerificationCategory> {
public static class VerificationCategoryConverter extends EnumConverterValidator<VerificationCategory> {

public VerificationCategoryConverter() {
super(VerificationCategory.class);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.evolveum.midpoint.ninja.action.upgrade;

import java.io.File;
import java.util.stream.Collectors;

import org.apache.commons.io.FileUtils;

Expand Down Expand Up @@ -52,7 +53,7 @@ public Void execute() throws Exception {
upgradeRepositoryOpts.setMode(RunSqlOptions.Mode.REPOSITORY);
upgradeRepositoryOpts.setScripts(RunSqlOptions.Mode.REPOSITORY.updateScripts.stream()
.map(f -> new File(installationDirectory, f.getPath()))
.toList());
.collect(Collectors.toList()));

RunSqlAction upgradeRepositoryAction = new RunSqlAction();
upgradeRepositoryAction.init(context, upgradeRepositoryOpts);
Expand All @@ -63,7 +64,7 @@ public Void execute() throws Exception {
upgradeAuditOpts.setMode(RunSqlOptions.Mode.AUDIT);
upgradeRepositoryOpts.setScripts(RunSqlOptions.Mode.AUDIT.updateScripts.stream()
.map(f -> new File(installationDirectory, f.getPath()))
.toList());
.collect(Collectors.toList()));

RunSqlAction upgradeAuditAction = new RunSqlAction();
upgradeAuditAction.init(context, upgradeAuditOpts);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,9 +60,17 @@ private void init() {
} else {
for (VerifyOptions.VerificationCategory category : categories) {
switch (category) {
case DEPRECATED -> validator.setWarnDeprecated(true);
case INCORRECT_OIDS -> validator.setWarnIncorrectOids(true);
case PLANNED_REMOVAL -> validator.setWarnPlannedRemoval(true);
case DEPRECATED:
validator.setWarnDeprecated(true);
break;
case INCORRECT_OIDS:
validator.setWarnIncorrectOids(true);
break;
case PLANNED_REMOVAL:
validator.setWarnPlannedRemoval(true);
break;
default:
throw new IllegalArgumentException("Unknown category " + category);
}
}
}
Expand Down Expand Up @@ -103,8 +111,14 @@ public void verify(Writer writer, PrismObject<?> object) throws IOException {
ValidationResult result = validator.validate(object);

switch (options.getReportStyle()) {
case PLAIN -> verifyAsPlain(writer, object, result);
case CSV -> verifyAsCsv(writer, object, result);
case PLAIN:
verifyAsPlain(writer, object, result);
break;
case CSV:
verifyAsCsv(writer, object, result);
break;
default:
throw new IllegalArgumentException("Unknown report style " + options.getReportStyle());
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
package com.evolveum.midpoint.ninja.impl;

/**
* @deprecated This listener is only used in tests.
* State should be asserted directly via repository service initialized not through ninja.
*/
@Deprecated
public interface ActionStateListener {

default void onBeforeInit(NinjaContext context) {
Expand Down
105 changes: 4 additions & 101 deletions tools/ninja/src/main/java/com/evolveum/midpoint/ninja/util/Log.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,19 +7,14 @@

package com.evolveum.midpoint.ninja.util;

import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.Logger;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.encoder.PatternLayoutEncoder;
import ch.qos.logback.core.Appender;
import ch.qos.logback.core.ConsoleAppender;
import ch.qos.logback.core.encoder.Encoder;
import org.jetbrains.annotations.NotNull;
import org.slf4j.LoggerFactory;

import com.evolveum.midpoint.ninja.impl.LogTarget;

/**
* TODO get rid of logback magic in here, this is hell. How could I do this. OMG.
*
* Created by Viliam Repan (lazyman).
*/
public class Log {
Expand All @@ -33,26 +28,16 @@ public enum LogLevel {
VERBOSE
}

private static final String LOGGER_SYS_OUT = "SYSOUT";

private static final String LOGGER_SYS_ERR = "SYSERR";

private static final String APPENDER_SYS_OUT = "STDOUT";

private static final String APPENDER_SYS_ERR = "STDERR";

private LogTarget target;

private LogLevel level;

private Logger info;
private Logger error;
private org.slf4j.Logger info = LoggerFactory.getLogger(Log.class);
private org.slf4j.Logger error = LoggerFactory.getLogger(Log.class);

public Log(@NotNull LogTarget target, @NotNull LogLevel level) {
this.target = target;
this.level = level;

init();
}

private boolean isVerbose() {
Expand All @@ -63,88 +48,6 @@ private boolean isSilent() {
return level == LogLevel.SILENT;
}

private void init() {
LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
lc.reset();
PatternLayoutEncoder ple = new PatternLayoutEncoder();

if (isVerbose()) {
ple.setPattern("%date [%thread] %-5level \\(%logger{46}\\): %message%n<");
} else {
ple.setPattern("%msg%n");
}

ple.setContext(lc);
ple.start();

ConsoleAppender err = setupAppender(APPENDER_SYS_ERR, "System.err", lc, setupEncoder(lc));

Logger root = (Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
if (LogTarget.SYSTEM_OUT.equals(target)) {
ConsoleAppender out = setupAppender(APPENDER_SYS_OUT, "System.out", lc, setupEncoder(lc));
addAppender(root, out);
} else {
addAppender(root, err);
}

root.setLevel(Level.OFF);

info = setupLogger(LOGGER_SYS_OUT);

error = setupLogger(LOGGER_SYS_ERR);
error.setAdditive(false);
addAppender(error, err);
}

private void addAppender(Logger logger, Appender appender) {
if (logger == null || logger.getAppender(appender.getName()) != null) {
return;
}

logger.addAppender(appender);
}

private Logger setupLogger(String name) {
Logger logger = (Logger) LoggerFactory.getLogger(name);

if (isSilent()) {
logger.setLevel(Level.OFF);
} else if (isVerbose()) {
logger.setLevel(Level.DEBUG);
} else {
logger.setLevel(Level.INFO);
}

return logger;
}

private Encoder setupEncoder(LoggerContext ctx) {
PatternLayoutEncoder ple = new PatternLayoutEncoder();

if (isVerbose()) {
ple.setPattern("%date [%thread] %-5level \\(%logger{46}\\): %message%n");
} else {
ple.setPattern("%msg%n");
}

ple.setContext(ctx);
ple.start();

return ple;
}

private ConsoleAppender setupAppender(String name, String target, LoggerContext ctx, Encoder enc) {
ConsoleAppender appender = new ConsoleAppender();
appender.setName(name);
appender.setTarget(target);
appender.setContext(ctx);
appender.setEncoder(enc);

appender.start();

return appender;
}

public void error(String message, Object... args) {
error(message, null, args);
}
Expand Down
12 changes: 1 addition & 11 deletions tools/ninja/src/main/resources/logback.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,5 @@
-->

<configuration>
<!--<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>./ninja.log</file>
<encoder>
<pattern>%date [%thread] %-5level \(%logger{46}\): %message%n</pattern>
</encoder>
</appender>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%date [%thread] %-5level \(%logger{46}\): %message%n</pattern>
</layout>
</appender>-->

</configuration>
Original file line number Diff line number Diff line change
Expand Up @@ -6,20 +6,16 @@
*/
package com.evolveum.midpoint.ninja;

import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.function.Consumer;
import java.io.File;
import java.io.IOException;

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationContext;

import com.evolveum.midpoint.common.configuration.api.MidpointConfiguration;
import com.evolveum.midpoint.ninja.impl.ActionStateListener;
import com.evolveum.midpoint.ninja.impl.NinjaContext;
import com.evolveum.midpoint.repo.api.RepositoryService;
import com.evolveum.midpoint.repo.sqale.SqaleRepoContext;
Expand All @@ -34,7 +30,7 @@
/**
* Created by Viliam Repan (lazyman).
*/
public class BaseTest extends AbstractUnitTest {
public class BaseTest extends AbstractUnitTest implements NinjaTestMixin {

private static final Logger LOG = LoggerFactory.getLogger(BaseTest.class);

Expand Down Expand Up @@ -69,38 +65,6 @@ protected String getMidpointHome() {
return TARGET_HOME.getAbsolutePath();
}

protected void executeTest(
String[] args, Consumer<List<String>> validateOut, Consumer<List<String>> validateErr, ActionStateListener actionStateListener)
throws IOException {

ByteArrayOutputStream bosOut = new ByteArrayOutputStream();
ByteArrayOutputStream bosErr = new ByteArrayOutputStream();
try (
PrintStream out = new PrintStream(bosOut);
PrintStream err = new PrintStream(bosErr)
) {
Main main = new Main();

main.setActionStateListener(actionStateListener);
main.setOut(out);
main.setErr(err);

main.run(args);
} finally {
processTestOutputStream(bosOut, validateOut, "OUT");
processTestOutputStream(bosErr, validateErr, "ERR");
}
}

private void processTestOutputStream(ByteArrayOutputStream bos, Consumer<List<String>> validator, String prefix) throws IOException {
List<String> lines = IOUtils.readLines(new ByteArrayInputStream(bos.toByteArray()), StandardCharsets.UTF_8);
lines.forEach(line -> logger.debug("{}: {}", prefix, line));

if (validator != null) {
validator.accept(lines);
}
}

protected void clearDb(NinjaContext ninjaContext) {
LOG.info("Cleaning up the database");

Expand Down

0 comments on commit fd49f29

Please sign in to comment.