From 610b8ef8021cc29769b714b9c407d98a1a883ded Mon Sep 17 00:00:00 2001 From: anshooarora Date: Wed, 9 Dec 2020 18:59:14 -0800 Subject: [PATCH 1/6] prepare next dev iteration --- pom.xml | 2 +- reporters/klov/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index f5aed02..64b7add 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 com.aventstack extentreports - 5.0.6 + 5.0.7-SNAPSHOT ExtentReports www.extentreports.com diff --git a/reporters/klov/pom.xml b/reporters/klov/pom.xml index c198667..8ee5eb2 100644 --- a/reporters/klov/pom.xml +++ b/reporters/klov/pom.xml @@ -5,7 +5,7 @@ com.aventstack klov-reporter - 5.0.6 + 5.0.7-SNAPSHOT klov-reporter www.extentreports.com From 6e5a6c023812fc95ced2a670ae8abe13eab64aeb Mon Sep 17 00:00:00 2001 From: Anshoo Arora Date: Wed, 17 Feb 2021 18:17:09 -0800 Subject: [PATCH 2/6] fixes #275 --- .../aventstack/extentreports/templates/spark/partials/head.ftl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/com/aventstack/extentreports/templates/spark/partials/head.ftl b/src/main/resources/com/aventstack/extentreports/templates/spark/partials/head.ftl index 07c02fc..bbc88e3 100644 --- a/src/main/resources/com/aventstack/extentreports/templates/spark/partials/head.ftl +++ b/src/main/resources/com/aventstack/extentreports/templates/spark/partials/head.ftl @@ -14,7 +14,7 @@ - + ${config.documentTitle} <#if offline> From b814f871f02abaddc8410f551c058753ae682344 Mon Sep 17 00:00:00 2001 From: Anshoo Arora Date: Wed, 17 Feb 2021 18:45:46 -0800 Subject: [PATCH 3/6] closes #261 --- .../java/com/aventstack/extentreports/markuputils/Table.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/aventstack/extentreports/markuputils/Table.java b/src/main/java/com/aventstack/extentreports/markuputils/Table.java index 83e3aac..937c334 100644 --- a/src/main/java/com/aventstack/extentreports/markuputils/Table.java +++ b/src/main/java/com/aventstack/extentreports/markuputils/Table.java @@ -128,7 +128,8 @@ private void appendMapItems(Object object, List list, StringBuilder sb, private void appendListItems(Object object, List list, StringBuilder sb, List columnRowCount) { int row = 0; Collection obj = (Collection) object; - for (int ix = obj.size(); ix >= list.size(); ix--) + int x = list.size(); + for (int ix = obj.size(); ix >= x; ix--) list.add(""); columnRowCount.set(columnRowCount.size() - 1, obj.size()); for (Object o : obj) { From 3050ca301b3d43c033559c91d1eba08e2c5af597 Mon Sep 17 00:00:00 2001 From: Anshoo Arora Date: Sun, 7 Mar 2021 15:44:06 -0800 Subject: [PATCH 4/6] fixes #250 --- .gitignore | 1 + .../extentreports/model/Report.java | 6 +- .../extentreports/model/ReportStats.java | 56 ++++++++++--------- .../entity/ReportStatsConcurrentTest.java | 28 ++++++++++ 4 files changed, 62 insertions(+), 29 deletions(-) create mode 100644 src/test/java/com/aventstack/extentreports/entity/ReportStatsConcurrentTest.java diff --git a/.gitignore b/.gitignore index 1c3b157..0f90161 100644 --- a/.gitignore +++ b/.gitignore @@ -40,3 +40,4 @@ deploycmd.txt # pom.nexus.xml +*.DS_Store diff --git a/src/main/java/com/aventstack/extentreports/model/Report.java b/src/main/java/com/aventstack/extentreports/model/Report.java index 3d9841b..b36f486 100644 --- a/src/main/java/com/aventstack/extentreports/model/Report.java +++ b/src/main/java/com/aventstack/extentreports/model/Report.java @@ -25,6 +25,8 @@ @ToString(includeFieldNames = true) public class Report implements Serializable, BaseEntity { private static final long serialVersionUID = -8667496631392333349L; + + private final Object obj = new Object(); @Builder.Default private Date startTime = Calendar.getInstance().getTime(); @@ -46,7 +48,7 @@ public final void refresh() { categoryCtx.getSet().forEach(x -> x.refresh()); deviceCtx.getSet().forEach(x -> x.refresh()); stats.update(testList); - synchronized (this) { + synchronized (obj) { setEndTime(Calendar.getInstance().getTime()); } } @@ -60,7 +62,7 @@ public final void applyOverrideConf() { .map(t -> t.getEndTime()) .max(Date::compareTo) .get(); - synchronized (this) { + synchronized (obj) { setStartTime(min); setEndTime(max); } diff --git a/src/main/java/com/aventstack/extentreports/model/ReportStats.java b/src/main/java/com/aventstack/extentreports/model/ReportStats.java index 521ce04..c688526 100644 --- a/src/main/java/com/aventstack/extentreports/model/ReportStats.java +++ b/src/main/java/com/aventstack/extentreports/model/ReportStats.java @@ -38,33 +38,35 @@ public final void update(final List testList) { if (testList == null || testList.isEmpty()) return; - update(testList, parent, parentPercentage); - - // level 1, for BDD, this would also include Scenario and excludes - // ScenarioOutline - List children = testList.stream() - .flatMap(x -> x.getChildren().stream()) - .filter(x -> x.getBddType() != ScenarioOutline.class) - .collect(Collectors.toList()); - List scenarios = testList.stream() - .flatMap(x -> x.getChildren().stream()) - .flatMap(x -> x.getChildren().stream()) - .filter(x -> x.getBddType() == Scenario.class) - .collect(Collectors.toList()); - children.addAll(scenarios); - update(children, child, childPercentage); - - // level 2, for BDD, this only includes Steps - List grandChildren = children.stream() - .flatMap(x -> x.getChildren().stream()) - .filter(x -> x.getBddType() != Scenario.class) - .collect(Collectors.toList()); - update(grandChildren, grandchild, grandchildPercentage); - - List logs = testList.stream().flatMap(x -> x.getLogs().stream()).collect(Collectors.toList()); - logs.addAll(children.stream().flatMap(x -> x.getLogs().stream()).collect(Collectors.toList())); - logs.addAll(grandChildren.stream().flatMap(x -> x.getLogs().stream()).collect(Collectors.toList())); - update(logs, log, logPercentage); + synchronized (testList) { + update(testList, parent, parentPercentage); + + // level 1, for BDD, this would also include Scenario and excludes + // ScenarioOutline + List children = testList.stream() + .flatMap(x -> x.getChildren().stream()) + .filter(x -> x.getBddType() != ScenarioOutline.class) + .collect(Collectors.toList()); + List scenarios = testList.stream() + .flatMap(x -> x.getChildren().stream()) + .flatMap(x -> x.getChildren().stream()) + .filter(x -> x.getBddType() == Scenario.class) + .collect(Collectors.toList()); + children.addAll(scenarios); + update(children, child, childPercentage); + + // level 2, for BDD, this only includes Steps + List grandChildren = children.stream() + .flatMap(x -> x.getChildren().stream()) + .filter(x -> x.getBddType() != Scenario.class) + .collect(Collectors.toList()); + update(grandChildren, grandchild, grandchildPercentage); + + List logs = testList.stream().flatMap(x -> x.getLogs().stream()).collect(Collectors.toList()); + logs.addAll(children.stream().flatMap(x -> x.getLogs().stream()).collect(Collectors.toList())); + logs.addAll(grandChildren.stream().flatMap(x -> x.getLogs().stream()).collect(Collectors.toList())); + update(logs, log, logPercentage); + } } private final void update(final List list, final Map countMap, diff --git a/src/test/java/com/aventstack/extentreports/entity/ReportStatsConcurrentTest.java b/src/test/java/com/aventstack/extentreports/entity/ReportStatsConcurrentTest.java new file mode 100644 index 0000000..d320138 --- /dev/null +++ b/src/test/java/com/aventstack/extentreports/entity/ReportStatsConcurrentTest.java @@ -0,0 +1,28 @@ +package com.aventstack.extentreports.entity; + +import java.util.stream.IntStream; + +import org.testng.Assert; +import org.testng.annotations.Test; + +import com.aventstack.extentreports.ExtentReports; + +public class ReportStatsConcurrentTest { + + /** + * Fix for ConcurrentModificationException caused due to iterating over testList + * vector in ReportStats::update + * + * Issue details: + * https://github.com/extent-framework/extentreports-java/issues/250 + */ + @Test + public void concurrentUpdateFlush() { + ExtentReports extent = new ExtentReports(); + IntStream.range(0, 100).parallel().forEach(x -> { + extent.createTest(String.valueOf(x)).pass(""); + extent.flush(); + }); + Assert.assertEquals(100, extent.getReport().getTestList().size()); + } +} From 1d49e39aa5792cd138fbcc3aa6a9be3e4e5d42a2 Mon Sep 17 00:00:00 2001 From: Anshoo Arora Date: Sun, 7 Mar 2021 15:44:26 -0800 Subject: [PATCH 5/6] fixes #282 --- .../context/NamedAttributeContextManager.java | 2 +- .../NamedAttributeContextManagerTest.java | 65 +++++++++++++++++++ 2 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 src/test/java/com/aventstack/extentreports/model/context/NamedAttributeContextManagerTest.java diff --git a/src/main/java/com/aventstack/extentreports/model/context/NamedAttributeContextManager.java b/src/main/java/com/aventstack/extentreports/model/context/NamedAttributeContextManager.java index caba555..da8683b 100644 --- a/src/main/java/com/aventstack/extentreports/model/context/NamedAttributeContextManager.java +++ b/src/main/java/com/aventstack/extentreports/model/context/NamedAttributeContextManager.java @@ -20,7 +20,7 @@ public class NamedAttributeContextManager { private Set> set = Collections .newSetFromMap(new ConcurrentHashMap, Boolean>()); - public void addContext(T attr, Test test) { + public synchronized void addContext(T attr, Test test) { Optional> opt = set.stream() .filter(x -> x.getAttr().getName().equals(attr.getName())) .findAny(); diff --git a/src/test/java/com/aventstack/extentreports/model/context/NamedAttributeContextManagerTest.java b/src/test/java/com/aventstack/extentreports/model/context/NamedAttributeContextManagerTest.java new file mode 100644 index 0000000..77f48f8 --- /dev/null +++ b/src/test/java/com/aventstack/extentreports/model/context/NamedAttributeContextManagerTest.java @@ -0,0 +1,65 @@ +package com.aventstack.extentreports.model.context; + +import java.util.Set; +import java.util.stream.IntStream; + +import org.testng.Assert; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.Test; + +import com.aventstack.extentreports.ExtentReports; +import com.aventstack.extentreports.model.Author; +import com.aventstack.extentreports.model.Category; +import com.aventstack.extentreports.model.Device; +import com.aventstack.extentreports.model.NamedAttribute; + +public class NamedAttributeContextManagerTest { + + private final String[] tags = new String[] { "tag1", "tag2", "tag3", "tag4" }; + + private ExtentReports _extent; + + @BeforeMethod + public void beforeMethod() { + _extent = new ExtentReports(); + } + + /** + * This test checks if the context only tracks tag uniqueness across N number of + * tests + * + * Issue details: + * https://github.com/extent-framework/extentreports-java/issues/282 + */ + @Test + public void concurrentlyAssignedTags() { + IntStream.range(1, 100).parallel().forEach(x -> { + _extent.createTest("Test" + x).assignCategory(tags).pass(""); + }); + final Set> set = _extent.getReport().getCategoryCtx().getSet(); + verifyContentAssert(set); + } + + private void verifyContentAssert(final Set> set) { + final String[] runtimeTags = set.stream().map(x -> x.getAttr().getName()).toArray(String[]::new); + Assert.assertEqualsNoOrder(tags, runtimeTags); + } + + @Test + public void concurrentlyAssignedUsers() { + IntStream.range(1, 100).parallel().forEach(x -> { + _extent.createTest("Test" + x).assignAuthor(tags).pass(""); + }); + final Set> set = _extent.getReport().getAuthorCtx().getSet(); + verifyContentAssert(set); + } + + @Test + public void concurrentlyAssignedDevices() { + IntStream.range(1, 100).parallel().forEach(x -> { + _extent.createTest("Test" + x).assignDevice(tags).pass(""); + }); + final Set> set = _extent.getReport().getDeviceCtx().getSet(); + verifyContentAssert(set); + } +} From 0efa8a51d6ca223d88716d6e6c4bdb3904af12c6 Mon Sep 17 00:00:00 2001 From: anshooarora Date: Mon, 8 Mar 2021 18:10:42 -0800 Subject: [PATCH 6/6] prepare release 5.0.7 --- CHANGELOG.md | 8 ++++++++ pom.xml | 2 +- reporters/klov/pom.xml | 4 ++-- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 27160de..013d3e7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +## [5.0.7](https://github.com/extent-framework/extentreports-java/compare/v5.0.6...v5.0.7) + +#### Issues Resolved +- [#250](/issues/250) ConcurrentModificationException in ReportStats +- [#261](/issues/261) Fix issue with table creation from POJOs +- [#275](/issues/275) setEncoding not working on ExtentSparkReporter on 5.0.6 +- [#282](/issues/282) Category tags are being duplicated if multiple tests have same tag + ## [5.0.6](https://github.com/extent-framework/extentreports-java/compare/v5.0.5...v5.0.6) #### Issues Resolved diff --git a/pom.xml b/pom.xml index 64b7add..78275ed 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 com.aventstack extentreports - 5.0.7-SNAPSHOT + 5.0.7 ExtentReports www.extentreports.com diff --git a/reporters/klov/pom.xml b/reporters/klov/pom.xml index 8ee5eb2..783e14e 100644 --- a/reporters/klov/pom.xml +++ b/reporters/klov/pom.xml @@ -5,7 +5,7 @@ com.aventstack klov-reporter - 5.0.7-SNAPSHOT + 5.0.7 klov-reporter www.extentreports.com @@ -44,7 +44,7 @@ com.aventstack extentreports - 5.0.6 + 5.0.7 org.mongodb