From 6db1dd4aee5482e067b6c5d1a96ad324d26090b7 Mon Sep 17 00:00:00 2001 From: Stephane Gamard Date: Tue, 10 Jun 2014 15:31:55 +0200 Subject: [PATCH] SONAR-5329 - Added Loggable interface and updated LogDao & tests --- .../src/main/java/org/sonar/core/log/Log.java | 10 +- .../core/log/{Activity.java => Loggable.java} | 14 +-- .../java/org/sonar/core/log/db/LogDto.java | 98 ++++++++++--------- .../java/org/sonar/core/log/db/LogKey.java | 53 +++++----- .../org/sonar/core/log/db/LogMapper.xml | 15 +-- .../org/sonar/core/persistence/schema-h2.ddl | 3 +- .../java/org/sonar/server/log/LogService.java | 42 +++++--- .../org/sonar/server/log/index/LogDoc.java | 10 +- .../sonar/server/log/index/LogNormalizer.java | 11 ++- .../qualityprofile/ActiveRuleChange.java | 41 ++------ .../server/qualityprofile/RuleActivator.java | 12 ++- .../org/sonar/server/log/db/LogDaoTest.java | 70 +++++++++++-- .../db/{TestActivity.java => TestLog.java} | 21 ++-- .../ActiveRuleChangeLogTest.java | 77 --------------- 14 files changed, 228 insertions(+), 249 deletions(-) rename sonar-core/src/main/java/org/sonar/core/log/{Activity.java => Loggable.java} (80%) rename sonar-server/src/test/java/org/sonar/server/log/db/{TestActivity.java => TestLog.java} (78%) delete mode 100644 sonar-server/src/test/java/org/sonar/server/qualityprofile/ActiveRuleChangeLogTest.java diff --git a/sonar-core/src/main/java/org/sonar/core/log/Log.java b/sonar-core/src/main/java/org/sonar/core/log/Log.java index 11802175886..2ca1e041b53 100644 --- a/sonar-core/src/main/java/org/sonar/core/log/Log.java +++ b/sonar-core/src/main/java/org/sonar/core/log/Log.java @@ -19,19 +19,23 @@ */ package org.sonar.core.log; -import java.util.Date; +import java.util.Map; /** * @since 4.4 */ public interface Log { - Date time(); + public static enum Type { + NONE, ACTIVE_RULE, SERVER + } + + Long timestamp(); String author(); Long executionTime(); - K getActivity(); + Map details(); } diff --git a/sonar-core/src/main/java/org/sonar/core/log/Activity.java b/sonar-core/src/main/java/org/sonar/core/log/Loggable.java similarity index 80% rename from sonar-core/src/main/java/org/sonar/core/log/Activity.java rename to sonar-core/src/main/java/org/sonar/core/log/Loggable.java index 0a0e06dfa42..8c29c280a80 100644 --- a/sonar-core/src/main/java/org/sonar/core/log/Activity.java +++ b/sonar-core/src/main/java/org/sonar/core/log/Loggable.java @@ -19,19 +19,15 @@ */ package org.sonar.core.log; +import java.util.Map; + /** * @since 4.4 */ +public interface Loggable { -public abstract class Activity { - - public Activity(){} - - public String getName(){ - return this.getClass().getSimpleName(); - } + Map getDetails(); - public abstract String serialize(); + Long getExecutionTime(); - public abstract Activity deSerialize(String data); } diff --git a/sonar-core/src/main/java/org/sonar/core/log/db/LogDto.java b/sonar-core/src/main/java/org/sonar/core/log/db/LogDto.java index b9464b3c57c..8466151089f 100644 --- a/sonar-core/src/main/java/org/sonar/core/log/db/LogDto.java +++ b/sonar-core/src/main/java/org/sonar/core/log/db/LogDto.java @@ -21,61 +21,53 @@ package org.sonar.core.log.db; import org.apache.commons.lang.builder.ReflectionToStringBuilder; import org.apache.commons.lang.builder.ToStringStyle; -import org.sonar.core.log.Activity; +import org.sonar.api.utils.KeyValueFormat; +import org.sonar.core.log.Log; +import org.sonar.core.log.Loggable; import org.sonar.core.persistence.Dto; -import java.util.Date; - /** * @since 4.4 */ public final class LogDto extends Dto { - - public static enum Payload { - TEST_ACTIVITY("org.sonar.server.log.db.TestActivity"), - ACTIVE_RULE_CHANGE("org.sonar.server.qualityprofile.ActiveRuleChange"); - - private final String clazz; - - private Payload(String ActiveClass) { - clazz = ActiveClass; - } - - public static Payload forClassName(String className){ - for(Payload payload:Payload.values()){ - if(payload.clazz.equals(className)) - return payload; - } - return null; - } - } - - private Date time; - private Payload payload; + private String message; + private Log.Type type; private String author; private Long executionTime; + private String data; protected LogDto(){ - } - public LogDto(String user, Activity activity) { - this.time = new Date(); - this.author = user; - this.payload = Payload.forClassName(activity.getClass().getCanonicalName()); - this.data = activity.serialize(); + @Override + public LogKey getKey() { + return LogKey.of(this.getCreatedAt(), type, author); } @Override - public LogKey getKey() { - return LogKey.of(time, payload, author); + public String toString() { + return ReflectionToStringBuilder.toString(this, ToStringStyle.MULTI_LINE_STYLE); } - public Date getTime() { - return time; + public Log.Type getType() { + return type; + } + + public LogDto setType(Log.Type type) { + this.type = type; + return this; + } + + public String getAuthor() { + return author; + } + + public LogDto setAuthor(String author) { + this.author = author; + return this; } public Long getExecutionTime() { @@ -87,22 +79,32 @@ public final class LogDto extends Dto { return this; } - public String getAuthor() { - return author; + public String getData() { + return data; } - public K getActivity() { - try { - Activity activity = ((Activity) Class.forName(this.payload.clazz, true, ClassLoader.getSystemClassLoader()).newInstance()); - return (K) activity.deSerialize(this.data); - } catch (Exception e) { - throw new IllegalStateException("Could not read Activity from DB. '" + this.payload - + "' is most likely missing a public no-args ctor", e); - } + public LogDto setData(String data) { + this.data = data; + return this; } - @Override - public String toString() { - return ReflectionToStringBuilder.toString(this, ToStringStyle.MULTI_LINE_STYLE); + public String getMessage() { + return message; + } + + public LogDto setMessage(String message) { + this.message = message; + return this; + } + + public static LogDto createFor(String message) { + return new LogDto() + .setMessage(message); + } + + public static LogDto createFor(Loggable loggable) { + return new LogDto() + .setData(KeyValueFormat.format(loggable.getDetails())) + .setExecutionTime(loggable.getExecutionTime()); } } diff --git a/sonar-core/src/main/java/org/sonar/core/log/db/LogKey.java b/sonar-core/src/main/java/org/sonar/core/log/db/LogKey.java index 24814e2ff92..3077ce3b499 100644 --- a/sonar-core/src/main/java/org/sonar/core/log/db/LogKey.java +++ b/sonar-core/src/main/java/org/sonar/core/log/db/LogKey.java @@ -20,6 +20,7 @@ package org.sonar.core.log.db; import com.google.common.base.Preconditions; +import org.sonar.core.log.Log; import java.io.Serializable; import java.util.Date; @@ -29,24 +30,24 @@ import java.util.Date; */ public class LogKey implements Serializable { - private Date time; - private LogDto.Payload payload; + private Date createdAt; + private Log.Type type; private String author; - public LogKey(Date time, LogDto.Payload payload, String author) { - this.time = time; - this.payload = payload; + public LogKey(Date createdAt, Log.Type type, String author) { + this.createdAt = createdAt; + this.type = type; this.author = author; } /** * Create a key. Parameters are NOT null. */ - public static LogKey of(Date time, LogDto.Payload payload, String author) { - Preconditions.checkArgument(time != null, "Time must be set"); - Preconditions.checkArgument(payload != null, "Payload must be set"); + public static LogKey of(Date createdAt, Log.Type type, String author) { + Preconditions.checkArgument(createdAt != null, "Time must be set"); + Preconditions.checkArgument(type != null, "Type must be set"); Preconditions.checkArgument(author != null, "Author must be set"); - return new LogKey(time, payload, author); + return new LogKey(createdAt, type, author); } /** @@ -57,33 +58,39 @@ public class LogKey implements Serializable { String[] split = s.split(":"); Preconditions.checkArgument(split.length == 3, "Invalid log key: " + s); return LogKey.of(new Date(Long.getLong(split[0])), - LogDto.Payload.valueOf(split[1]), split[2]); + Log.Type.valueOf(split[1]), split[2]); } - public Date getTime() { - return time; + public Date getCreatedAt() { + return createdAt; } - public LogKey setTime(Date time) { - this.time = time; - return this; + public void setCreatedAt(Date createdAt) { + this.createdAt = createdAt; } - public LogDto.Payload getPayload() { - return payload; + public String getAuthor() { + return author; } - public LogKey setPayload(LogDto.Payload payload) { - this.payload = payload; + public LogKey setAuthor(String author) { + this.author = author; return this; } - public String getAuthor() { - return author; + public Log.Type getType() { + return type; } - public LogKey setAuthor(String author) { - this.author = author; + public LogKey setType(Log.Type type) { + this.type = type; return this; } + + @Override + public String toString() { + return this.createdAt.getTime() + + ":" + this.type + + ":" + this.getAuthor(); + } } diff --git a/sonar-core/src/main/resources/org/sonar/core/log/db/LogMapper.xml b/sonar-core/src/main/resources/org/sonar/core/log/db/LogMapper.xml index ad772e18fa5..b4d0ca1cac9 100644 --- a/sonar-core/src/main/resources/org/sonar/core/log/db/LogMapper.xml +++ b/sonar-core/src/main/resources/org/sonar/core/log/db/LogMapper.xml @@ -4,21 +4,22 @@ insert into logs - (payload_field, created_at,execution_time_field,user_login,data_field) - values (#{payload}, #{time}, #{executionTime}, #{author}, #{data}) + (created_at, log_type,execution_time_field,user_login,data_field, log_message) + values (#{createdAt}, #{type}, #{executionTime}, #{author}, #{data}, #{message}) diff --git a/sonar-core/src/main/resources/org/sonar/core/persistence/schema-h2.ddl b/sonar-core/src/main/resources/org/sonar/core/persistence/schema-h2.ddl index 34ea99f7bba..111378341b2 100644 --- a/sonar-core/src/main/resources/org/sonar/core/persistence/schema-h2.ddl +++ b/sonar-core/src/main/resources/org/sonar/core/persistence/schema-h2.ddl @@ -556,7 +556,8 @@ CREATE TABLE "LOGS" ( "CREATED_AT" TIMESTAMP, "EXECUTION_TIME_FIELD" LONG, "USER_LOGIN" VARCHAR(30), - "PAYLOAD_FIELD" VARCHAR(250), + "LOG_TYPE" VARCHAR(250), + "LOG_MESSAGE" VARCHAR(250), "DATA_FIELD" CLOB(2147483647) ); diff --git a/sonar-server/src/main/java/org/sonar/server/log/LogService.java b/sonar-server/src/main/java/org/sonar/server/log/LogService.java index 7ff85d33947..a397ce5fc6f 100644 --- a/sonar-server/src/main/java/org/sonar/server/log/LogService.java +++ b/sonar-server/src/main/java/org/sonar/server/log/LogService.java @@ -19,7 +19,8 @@ */ package org.sonar.server.log; -import org.sonar.core.log.Activity; +import org.sonar.core.log.Log; +import org.sonar.core.log.Loggable; import org.sonar.core.log.db.LogDto; import org.sonar.core.persistence.DbSession; import org.sonar.server.db.DbClient; @@ -30,7 +31,7 @@ import java.util.List; /** * Log service is used to log Activity classes which represents an event to DB and Index. * - * @see org.sonar.core.log.Activity + * @see org.sonar.core.log.Loggable * @since 4.4 */ public class LogService { @@ -41,24 +42,33 @@ public class LogService { this.dbClient = dbClient; } - public void write(Activity activity) { - DbSession session = dbClient.openSession(false); - try { - this.write(session, activity); - } finally { - session.close(); - } + private String getAuthor() { + return (UserSession.get().login() != null) ? UserSession.get().login() : "UNKNOWN"; + } + + private void save(DbSession session, LogDto log) { + dbClient.logDao().insert(session, + log.setAuthor(getAuthor())); } - public void write(DbSession session, K activity) { - dbClient.logDao().insert(session, new LogDto( - (UserSession.get().login() != null) ? UserSession.get().login() : "UNKNOWN", - activity)); + public void write(DbSession session, Log.Type type, String message) { + this.write(session, type, message, null); } - public void write(DbSession session, List activities) { - for(Activity activity:activities){ - write(session, activity); + public void write(DbSession session, Log.Type type, String message, Long time) { + this.save(session, LogDto.createFor(message) + .setType(type) + .setExecutionTime(time)); + } + + public void write(DbSession session, Log.Type type, List logs) { + for (Loggable log : logs) { + this.write(session, type, log); } } + + public void write(DbSession session, Log.Type type, L log) { + this.save(session, LogDto.createFor(log) + .setType(type)); + } } diff --git a/sonar-server/src/main/java/org/sonar/server/log/index/LogDoc.java b/sonar-server/src/main/java/org/sonar/server/log/index/LogDoc.java index ec38ff5f9e5..258ba8f0a59 100644 --- a/sonar-server/src/main/java/org/sonar/server/log/index/LogDoc.java +++ b/sonar-server/src/main/java/org/sonar/server/log/index/LogDoc.java @@ -19,11 +19,9 @@ */ package org.sonar.server.log.index; -import org.sonar.core.log.Activity; import org.sonar.core.log.Log; import org.sonar.server.search.BaseDoc; -import java.util.Date; import java.util.Map; /** @@ -36,8 +34,8 @@ public class LogDoc extends BaseDoc implements Log { } @Override - public Date time() { - return this.getField(LogNormalizer.LogFields.TIME.field()); + public Long timestamp() { + return this.getField(LogNormalizer.LogFields.TIMESTAMP.field()); } @Override @@ -51,7 +49,7 @@ public class LogDoc extends BaseDoc implements Log { } @Override - public K getActivity() { - return null; + public Map details() { + return this.getField(LogNormalizer.LogFields.DETAILS.field()); } } diff --git a/sonar-server/src/main/java/org/sonar/server/log/index/LogNormalizer.java b/sonar-server/src/main/java/org/sonar/server/log/index/LogNormalizer.java index 0fca7905efd..9438d5892a5 100644 --- a/sonar-server/src/main/java/org/sonar/server/log/index/LogNormalizer.java +++ b/sonar-server/src/main/java/org/sonar/server/log/index/LogNormalizer.java @@ -21,6 +21,7 @@ package org.sonar.server.log.index; import com.google.common.collect.ImmutableList; import org.elasticsearch.action.update.UpdateRequest; +import org.sonar.api.utils.KeyValueFormat; import org.sonar.core.log.db.LogDto; import org.sonar.core.log.db.LogKey; import org.sonar.core.persistence.DbSession; @@ -48,9 +49,10 @@ public class LogNormalizer extends BaseNormalizer { public static final class LogFields extends Indexable { public final static IndexField KEY = addSortableAndSearchable(IndexField.Type.STRING, "key"); - public final static IndexField TIME = addSortable(IndexField.Type.DATE, "time"); + public final static IndexField TIMESTAMP = addSortable(IndexField.Type.DATE, "timestamp"); public final static IndexField EXECUTION = add(IndexField.Type.NUMERIC, "executionTime"); - public final static IndexField AUTHOR = addSearchable(IndexField.Type.STRING, "executionTime"); + public final static IndexField AUTHOR = addSearchable(IndexField.Type.STRING, "author"); + public final static IndexField DETAILS = addSearchable(IndexField.Type.OBJECT, "details"); public static Set ALL_FIELDS = getAllFields(); @@ -93,9 +95,8 @@ public class LogNormalizer extends BaseNormalizer { logDoc.put(LogFields.KEY.field(), dto.getKey()); logDoc.put(LogFields.AUTHOR.field(), dto.getAuthor()); logDoc.put(LogFields.EXECUTION.field(), dto.getExecutionTime()); - logDoc.put(LogFields.TIME.field(), dto.getTime()); - - + logDoc.put(LogFields.TIMESTAMP.field(), dto.getCreatedAt()); + logDoc.put(LogFields.DETAILS.field(), KeyValueFormat.parse(dto.getData())); /* Creating updateRequest */ return ImmutableList.of(new UpdateRequest() diff --git a/sonar-server/src/main/java/org/sonar/server/qualityprofile/ActiveRuleChange.java b/sonar-server/src/main/java/org/sonar/server/qualityprofile/ActiveRuleChange.java index 5180caf80bd..68c3691300d 100644 --- a/sonar-server/src/main/java/org/sonar/server/qualityprofile/ActiveRuleChange.java +++ b/sonar-server/src/main/java/org/sonar/server/qualityprofile/ActiveRuleChange.java @@ -20,20 +20,14 @@ package org.sonar.server.qualityprofile; import com.google.common.collect.Maps; -import org.sonar.core.log.Activity; +import org.sonar.core.log.Loggable; import org.sonar.core.qualityprofile.db.ActiveRuleKey; -import org.yaml.snakeyaml.external.biz.base64Coder.Base64Coder; import javax.annotation.CheckForNull; import javax.annotation.Nullable; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; -import java.io.Serializable; import java.util.Map; -public class ActiveRuleChange extends Activity implements Serializable { +public class ActiveRuleChange implements Loggable { static enum Type { ACTIVATED, DEACTIVATED, UPDATED @@ -46,7 +40,7 @@ public class ActiveRuleChange extends Activity implements Serializable { private ActiveRule.Inheritance previousInheritance = null, inheritance = null; private Map parameters = Maps.newHashMap(); - public ActiveRuleChange(){ + public ActiveRuleChange() { type = null; key = null; } @@ -97,7 +91,7 @@ public class ActiveRuleChange extends Activity implements Serializable { } @CheckForNull - public ActiveRule.Inheritance getInheritance(){ + public ActiveRule.Inheritance getInheritance() { return this.inheritance; } @@ -111,31 +105,12 @@ public class ActiveRuleChange extends Activity implements Serializable { } @Override - public String serialize() { - //TODO do not use JDK's serialization - try { - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - ObjectOutputStream oos = new ObjectOutputStream(baos); - oos.writeObject(this); - oos.close(); - return new String(Base64Coder.encode(baos.toByteArray())); - } catch (Exception e) { - throw new IllegalStateException("Could not serialize.",e); - } + public Map getDetails() { + return null; } @Override - public ActiveRuleChange deSerialize(String data) { - //TODO do not use JDK's deserialization - try { - byte [] bytes = Base64Coder.decode(data); - ObjectInputStream ois = new ObjectInputStream( - new ByteArrayInputStream(bytes)); - ActiveRuleChange o = (ActiveRuleChange) ois.readObject(); - ois.close(); - return o; - } catch (Exception e) { - throw new IllegalStateException("Could not serialize.",e); - } + public Long getExecutionTime() { + return null; } } diff --git a/sonar-server/src/main/java/org/sonar/server/qualityprofile/RuleActivator.java b/sonar-server/src/main/java/org/sonar/server/qualityprofile/RuleActivator.java index ebc507aa31f..7fe1b275f36 100644 --- a/sonar-server/src/main/java/org/sonar/server/qualityprofile/RuleActivator.java +++ b/sonar-server/src/main/java/org/sonar/server/qualityprofile/RuleActivator.java @@ -27,9 +27,14 @@ import com.google.common.collect.Multimap; import org.apache.commons.lang.StringUtils; import org.sonar.api.ServerComponent; import org.sonar.api.server.rule.RuleParamType; +import org.sonar.core.log.Log; import org.sonar.core.persistence.DbSession; import org.sonar.core.preview.PreviewCache; -import org.sonar.core.qualityprofile.db.*; +import org.sonar.core.qualityprofile.db.ActiveRuleDto; +import org.sonar.core.qualityprofile.db.ActiveRuleKey; +import org.sonar.core.qualityprofile.db.ActiveRuleParamDto; +import org.sonar.core.qualityprofile.db.QualityProfileDto; +import org.sonar.core.qualityprofile.db.QualityProfileKey; import org.sonar.core.rule.RuleDto; import org.sonar.core.rule.RuleParamDto; import org.sonar.server.db.DbClient; @@ -46,7 +51,6 @@ import org.sonar.server.search.QueryOptions; import org.sonar.server.util.TypeValidations; import javax.annotation.Nullable; - import java.util.Iterator; import java.util.List; import java.util.Map; @@ -144,7 +148,7 @@ public class RuleActivator implements ServerComponent { changes.addAll(cascadeActivation(dbSession, activation)); if (!changes.isEmpty()) { - log.write(dbSession, changes); + log.write(dbSession, Log.Type.ACTIVE_RULE, changes); dbSession.commit(); previewCache.reportGlobalModification(); } @@ -298,7 +302,7 @@ public class RuleActivator implements ServerComponent { } if (!changes.isEmpty()) { - log.write(dbSession, changes); + log.write(dbSession, Log.Type.ACTIVE_RULE, changes); dbSession.commit(); previewCache.reportGlobalModification(); } diff --git a/sonar-server/src/test/java/org/sonar/server/log/db/LogDaoTest.java b/sonar-server/src/test/java/org/sonar/server/log/db/LogDaoTest.java index 6eeb79ad1e3..ac41444ceb2 100644 --- a/sonar-server/src/test/java/org/sonar/server/log/db/LogDaoTest.java +++ b/sonar-server/src/test/java/org/sonar/server/log/db/LogDaoTest.java @@ -20,18 +20,24 @@ package org.sonar.server.log.db; +import com.google.common.collect.ImmutableMap; import org.junit.After; import org.junit.Before; import org.junit.Test; +import org.sonar.api.utils.KeyValueFormat; import org.sonar.api.utils.System2; +import org.sonar.core.log.Log; +import org.sonar.core.log.Loggable; import org.sonar.core.log.db.LogDto; import org.sonar.core.persistence.AbstractDaoTestCase; import org.sonar.core.persistence.DbSession; +import java.util.Map; + import static org.fest.assertions.Assertions.assertThat; import static org.mockito.Mockito.mock; -public class LogDaoTest extends AbstractDaoTestCase{ +public class LogDaoTest extends AbstractDaoTestCase { private LogDao dao; @@ -46,24 +52,72 @@ public class LogDaoTest extends AbstractDaoTestCase{ } @After - public void after(){ + public void after() { session.close(); } @Test - public void insert_log(){ + public void fail_insert_missing_type() { + String testValue = "hello world"; + LogDto log = LogDto.createFor(testValue); + try { + dao.insert(session, log); + } catch (IllegalArgumentException e) { + assertThat(e.getMessage()).isEqualTo("Type must be set"); + } + } - TestActivity activity = new TestActivity("hello world"); + @Test + public void fail_insert_missing_author() { + String testValue = "hello world"; + LogDto log = LogDto.createFor(testValue) + .setType(Log.Type.ACTIVE_RULE); + try { + dao.insert(session, log); + } catch (IllegalArgumentException e) { + assertThat(e.getMessage()).isEqualTo("Type must be set"); + } + } - LogDto log = new LogDto("SYSTEM_USER", activity); + @Test + public void insert_text_log() { + String testValue = "hello world"; + LogDto log = LogDto.createFor(testValue) + .setType(Log.Type.ACTIVE_RULE) + .setAuthor("jUnit"); + dao.insert(session, log); + LogDto newDto = dao.getByKey(session, log.getKey()); + assertThat(newDto.getAuthor()).isEqualTo(log.getAuthor()); + assertThat(newDto.getMessage()).isEqualTo(testValue); + } + + @Test + public void insert_loggable_log() { + final String testKey = "message"; + final String testValue = "hello world"; + LogDto log = LogDto.createFor(new Loggable() { + + @Override + public Map getDetails() { + return ImmutableMap.of(testKey, testValue); + } + + @Override + public Long getExecutionTime() { + return 12L; + } + }) + .setAuthor("jUnit") + .setType(Log.Type.ACTIVE_RULE); dao.insert(session, log); LogDto newDto = dao.getByKey(session, log.getKey()); assertThat(newDto.getAuthor()).isEqualTo(log.getAuthor()); - TestActivity newActivity = newDto.getActivity(); - assertThat(newActivity.test).isEqualTo("hello world"); - + assertThat(newDto.getData()).isNotNull(); + Map details = KeyValueFormat.parse(newDto.getData()); + assertThat(details.get(testKey)).isEqualTo(testValue); } + } \ No newline at end of file diff --git a/sonar-server/src/test/java/org/sonar/server/log/db/TestActivity.java b/sonar-server/src/test/java/org/sonar/server/log/db/TestLog.java similarity index 78% rename from sonar-server/src/test/java/org/sonar/server/log/db/TestActivity.java rename to sonar-server/src/test/java/org/sonar/server/log/db/TestLog.java index 7a9b000ea18..38ee1076987 100644 --- a/sonar-server/src/test/java/org/sonar/server/log/db/TestActivity.java +++ b/sonar-server/src/test/java/org/sonar/server/log/db/TestLog.java @@ -19,29 +19,32 @@ */ package org.sonar.server.log.db; -import org.sonar.core.log.Activity; +import org.sonar.core.log.Loggable; + +import java.util.Map; /** * @since 4.4 */ -public class TestActivity extends Activity { +public class TestLog implements Loggable { public String test; - public TestActivity(){} + public TestLog() { + } - public TestActivity(String test){ + public TestLog(String test) { this.test = test; } + @Override - public String serialize() { - return test; + public Map getDetails() { + return null; } @Override - public Activity deSerialize(String data) { - test = data; - return this; + public Long getExecutionTime() { + return null; } } \ No newline at end of file diff --git a/sonar-server/src/test/java/org/sonar/server/qualityprofile/ActiveRuleChangeLogTest.java b/sonar-server/src/test/java/org/sonar/server/qualityprofile/ActiveRuleChangeLogTest.java deleted file mode 100644 index 6987fe77d7a..00000000000 --- a/sonar-server/src/test/java/org/sonar/server/qualityprofile/ActiveRuleChangeLogTest.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * SonarQube, open source software quality management tool. - * Copyright (C) 2008-2014 SonarSource - * mailto:contact AT sonarsource DOT com - * - * SonarQube is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. - * - * SonarQube is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ -package org.sonar.server.qualityprofile; - - -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.sonar.api.rule.RuleKey; -import org.sonar.api.utils.System2; -import org.sonar.core.log.db.LogDto; -import org.sonar.core.persistence.AbstractDaoTestCase; -import org.sonar.core.persistence.DbSession; -import org.sonar.core.qualityprofile.db.ActiveRuleKey; -import org.sonar.core.qualityprofile.db.QualityProfileKey; -import org.sonar.server.log.db.LogDao; - -import static org.fest.assertions.Assertions.assertThat; -import static org.mockito.Mockito.mock; - -public class ActiveRuleChangeLogTest extends AbstractDaoTestCase { - - private LogDao dao; - private DbSession session; - private System2 system2; - - @Before - public void before() throws Exception { - this.session = getMyBatis().openSession(false); - this.system2 = mock(System2.class); - this.dao = new LogDao(system2); - } - - @After - public void after() { - session.close(); - } - - @Test - public void insert_log() { - - ActiveRuleKey ruleKey = ActiveRuleKey.of( - QualityProfileKey.of("name", "java"), - RuleKey.of("repository", "S001")); - ActiveRuleChange ruleChange = new ActiveRuleChange(ActiveRuleChange.Type.ACTIVATED, ruleKey) - .setInheritance(ActiveRule.Inheritance.INHERITED); - - LogDto log = new LogDto("SYSTEM_USER", ruleChange); - - dao.insert(session, log); - - LogDto newDto = dao.getByKey(session, log.getKey()); - assertThat(newDto.getAuthor()).isEqualTo(log.getAuthor()); - - ActiveRuleChange loggedRuleChange = newDto.getActivity(); - assertThat(loggedRuleChange.getKey()).isEqualTo(ruleKey); - assertThat(ruleChange.getInheritance()).isEqualTo(ActiveRule.Inheritance.INHERITED); - - } -} \ No newline at end of file -- 2.39.5