Skip to content
Open
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
5 changes: 2 additions & 3 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>ru.spbau.mit</groupId>
<groupId>ru.spbau.yaveyn.java.junithw</groupId>
<artifactId>assignments</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>

<name>assignments</name>
<name>junithw</name>
<url>http://maven.apache.org</url>

<properties>
Expand All @@ -19,7 +19,6 @@
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
Expand Down
Empty file.
35 changes: 35 additions & 0 deletions src/main/java/ru/spbau/yaveyn/java/junithw/MemoryLeakLimit.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package ru.spbau.yaveyn.java.junithw;

/**
* Created by bronti on 04.05.17.
*/

import org.junit.Assert;
import org.junit.rules.TestRule;
import org.junit.runner.Description;
import org.junit.runners.model.Statement;

public class MemoryLeakLimit implements TestRule {
private long mbLimit;

public Statement apply(final Statement base, Description description) {
return new Statement() {
@Override
public void evaluate() throws Throwable {
Runtime rt = Runtime.getRuntime();
System.gc();
long beforeUsedMb = (rt.totalMemory() - rt.freeMemory()) / 1024 / 1024;
base.evaluate();
long afterUsedMb = (rt.totalMemory() - rt.freeMemory()) / 1024 / 1024;
System.gc();
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

думаю это должно стоять на 1 строку выше)

Assert.assertTrue(
String.format("Memory leak detected (%1$d Mb > %2$d Mb)", afterUsedMb - beforeUsedMb, mbLimit),
afterUsedMb - beforeUsedMb <= mbLimit);
}
};
}

public void limit(long mb) {
this.mbLimit = mb;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
package ru.spbau.yaveyn.java.junithw;

import com.sun.org.apache.xpath.internal.operations.Bool;
import org.junit.Assert;
import org.junit.rules.TestRule;
import org.junit.runner.Description;
import org.junit.runners.model.Statement;

import java.util.ArrayList;
import java.util.List;
import java.util.Queue;
import java.util.concurrent.ConcurrentLinkedQueue;

/**
* Created by bronti on 04.05.17.
*/
public class ThreadExpectedException implements TestRule {

private Class<? extends Throwable> expectedThrowable;
private Queue<Thread> registeredThreads = new ConcurrentLinkedQueue<>();
private final Queue<Boolean> threadCorectness = new ConcurrentLinkedQueue<>();

public void expect(Class<? extends Throwable> e){
expectedThrowable = e;
}

public void registerThread(Thread t) {
registeredThreads.add(t);
final Class<? extends Throwable> currentThrowable = expectedThrowable;
t.setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread t, Throwable e) {
if (currentThrowable.equals(e.getClass())) {
threadCorectness.add(true);
}
}
});
// t.start();
// не уверена, что правильно поняла задание, если честно..
}

@Override
public Statement apply(final Statement base, Description description) {
return new Statement() {
@Override
public void evaluate() throws Throwable {
base.evaluate();
String msg = "Some thread is running or did not throw expected exception.";
if (expectedThrowable != null) {
Assert.assertEquals(msg, registeredThreads.size(), threadCorectness.size());
}
for (Thread t : registeredThreads) {
t.setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread t, Throwable e) {}
});
}
registeredThreads.clear();
threadCorectness.clear();
// судя по заданию, если expectedThrowable -- null, то не надо ничего проверять. Надеюсь, я правильно поняла.
}
};
}
}
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package ru.spbau.yaveyn.java.junithw;

import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;

/**
* Created by bronti on 04.05.17.
*/
public class MemoryLeakLimitTest {

@Rule
public MemoryLeakLimit mll = new MemoryLeakLimit();



@Test
public void testSuccess() {
mll.limit(1);
}

@Test
@Ignore
public void testFail() {
mll.limit(-1);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
package ru.spbau.yaveyn.java.junithw;

import com.sun.javaws.exceptions.InvalidArgumentException;
import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
import sun.plugin.dom.exception.InvalidStateException;

/**
* Created by bronti on 04.05.17.
*/
public class ThreadExpectedExceptionTest {

@Rule
public ThreadExpectedException tee = new ThreadExpectedException();



@Test
public void testSuccess() {
Thread t = new Thread () {
@Override
public void run(){
throw new InvalidStateException("");
}
};
tee.expect(InvalidStateException.class);
tee.registerThread(t);
t.start();
try {
Thread.sleep(100);
}
catch (Exception e) {
// do nothing
}
}

@Test
public void testNotExpected() {
Thread t = new Thread () {
@Override
public void run(){
throw new InvalidStateException("");
}
};
tee.registerThread(t);
t.start();
try {
Thread.sleep(100);
}
catch (Exception e) {
// do nothing
}
}

@Test
@Ignore
public void testFail() {
Thread t = new Thread () {
@Override
public void run(){
throw new InvalidStateException("");
}
};
tee.expect(InvalidArgumentException.class);
tee.registerThread(t);
t.start();
try {
Thread.sleep(100);
}
catch (Exception e) {
// do nothing
}
}
}