TLS fuckup

Wer in der technischen Welt die letzten Tage nicht geschlafen hat, hat das ganze Szenario „Heartbleed“ bestimmt mitgekriegt. Ich will dazu gar nichts schreiben, nur ein paar URLs posten an die man denken sollte, wenn man neue Passwörter vergibt:

Die Liste wird dann von mir erweitert, sobald ich drauf stoße 🙂

EasyMock, Unitils and a mixture of both

So, we do use unitils and easymock for quite a while now. We do our mocking with easymock and use the unitils-inject and unitils-easymock modules to simplify our tests.

But, there was a very weird behaviour. So I tried to boil it down to the reason why it fails. Here is some code that we actually want to test:

package de.matthiascoy.easymock.easymockprimitivetest;
public interface InterfaceB {
    void foobar(boolean b);
}
package de.matthiascoy.easymock.easymockprimitivetest;
public class TestedObjectClass {
    private InterfaceB interfaceB;
    public void runMe(boolean b) {
        interfaceB.foobar(b);
        interfaceB.foobar(b);
    }
}

So, obviously we want to test toe runMe-method and want to verify that the two calls on the interfaceB are actually done with the given arguments. Our first try was this code:

package de.matthiascoy.easymock.easymockprimitivetest;
import org.easymock.EasyMock;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.unitils.UnitilsJUnit4TestClassRunner;
import org.unitils.easymock.EasyMockUnitils;
import org.unitils.inject.annotation.InjectIntoByType;
import org.unitils.inject.annotation.TestedObject;

@RunWith(UnitilsJUnit4TestClassRunner.class)
public class EasyMockAndUnitilsTest {

    @TestedObject
    private TestedObjectClass testedObject;

    @InjectIntoByType
    private InterfaceB interfaceB;

    @Before
    public void setUp() {
        this.interfaceB = EasyMock.createMock(InterfaceB.class);
    }

    @Test(expected = AssertionError.class)
    public void testPrimitiveBoolean() {
        boolean B = true;

        interfaceB.foobar(B);
        EasyMock.expectLastCall();
        interfaceB.foobar(!B);
        EasyMock.expectLastCall();
        EasyMockUnitils.replay();

        testedObject.runMe(B);

        EasyMockUnitils.verify();
    }
}

What you can see is, that we do expect first TRUE and then FALSE, but that should fail. We do test that with the „expected=AssertionError“ value in the @Test annotation. But actually this tests fails, because there is no AssertionError. With just a „@Test“ the test just runs and shows us a green light. That’s very strange. So, we thought: must be a bug in the testingframework, but which one?

So, we created a EasyMock 3.2 only test

package de.matthiascoy.easymock.easymockprimitivetest;

import org.easymock.EasyMock;
import org.easymock.EasyMockRunner;
import org.easymock.EasyMockSupport;

import org.easymock.Mock;
import org.easymock.TestSubject;
import org.junit.Test;
import org.junit.runner.RunWith;

@RunWith(EasyMockRunner.class)
public class PureEasyMockTest extends EasyMockSupport {

    @TestSubject
    private TestedObjectClass testedObject = new TestedObjectClass();

    @Mock
    private InterfaceB interfaceBMock;

    @Test(expected = AssertionError.class)
    public void testPrimitiveBoolean() {
        boolean B = true;

        interfaceBMock.foobar(B);
        EasyMock.expectLastCall();
        interfaceBMock.foobar(!B);
        EasyMock.expectLastCall();

        replayAll();

        testedObject.runMe(B);

        verifyAll();
    }

    @Test(expected = AssertionError.class)
    public void testPrimitiveBooleanWithEq() {
        boolean B = true;

        interfaceBMock.foobar(EasyMock.eq(B));
        EasyMock.expectLastCall();
        interfaceBMock.foobar(EasyMock.eq(!B));
        EasyMock.expectLastCall();

        replayAll();

        testedObject.runMe(B);

        verifyAll();
    }
}

This test does work. So, easymock seems not to be the problem. Now, to unitils:

package de.matthiascoy.easymock.easymockprimitivetest;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.unitils.UnitilsJUnit4TestClassRunner;
import org.unitils.inject.annotation.InjectIntoByType;
import org.unitils.inject.annotation.TestedObject;
import org.unitils.mock.Mock;

@RunWith(UnitilsJUnit4TestClassRunner.class)
public class UnitilsTest {

    @TestedObject
    private TestedObjectClass testedObject;

    @InjectIntoByType
    private Mock<InterfaceB> interfaceB;

    @Test(expected = AssertionError.class)
    public void testPrimitiveBoolean() {
        boolean B = true;

        testedObject.runMe(B);

        interfaceB.assertInvoked().foobar(B);
        interfaceB.assertInvoked().foobar(!B);
    }
}

And this test just works fine as well. So, the problem must be somewhere in the middle. I’m still not sure where exactly, but the second call to interfaceB.foobar in EasyMockAndUnitilsTest.testPrimitiveBoolean does not care about the arguments. It does care about if it’s called or not, but the argument is ignored.

So, we decided to migrate all our tests to pure easymock. Maybe, somehow we will move to mockito at the end … maybe.

Sneak: Jack Ryan: Shadow Recruit

Da geht man mal wieder in die Sneak in die Schauburg, da kommt da so ein Schundfilm. Ich mein, mir sind Hollywoodblockbuster doch irgendwie lieber als Filme der bayrischen Filmförderung in Verbindung mit der französischen Gesellschaft zur Etablierung von Film Noir, aber dieser Schinken lohnt sich nicht wirklich. Blabla-Story, Keria Kneightly, die ich den ganzen Film über für Natalie Portman gehalten hab, Chris Pine (Captain Kirk) und Kevin Kostner (nunja, bei mir halt Robin Hood). Larifari, bissle Romantik, dann plötzlich Agententhriller, gemischt mit der üblichen Portion TERRORISMUS!!!!111elf und schon hat man einen Film. Imdb gibt nicht umsonst nur 6,5, ich würde sogar nur 5 geben …. den Film schaut man noch nicht mal später auf DVD.

New York – Williamsburg

Wir waren natürlich auch im z.Z. angesagtestem Viertel von NYC: Williamsburg. Wen man in NYC Kunst, Musik bzw. einfach allgemein Künstler treffen will, geht man dort hin. Und, der Hipster der was auf sich hält, wohnt natürlich dort.

Um meinem Ruf gerecht zu werden („du postest nur Bilder vom Essen“), war einer der ersten Dinge die wir besucht haben, ein Essensmarkt. Hier gab es keine Früchte, Gemüse oder sonstige Auslagen, hier haben kleine Firmen ihr Essensangebot ausgelegt. Man steht also am East River, mit Blick auf Manhatten, friert sich den Hintern ab und futtern Toastbrot. Oder Muffins. Oder Kuchen. Oder Pizza. Oder Bagels. Oder sonstirgendwelcheszeug.

Ansonsten kann ich dazu nicht viel erzählen, man läuft halt rum, unterhält sich mit Leuten, stöbert in Läden, langweilt sich in anderen Läden, weil $bekannte ein Kleid kaufen will und am Ende ißt man dann Waffeln mit Hühnchen. Genau. Aber dazu gibts noch einen eigenen Beitrag 😀

Cambodia – Miscellaneous

Eigentlich müsste ich noch ein paar Artikel über New York schreiben, aber chronologische Reihenfolge wird eh überschätzt.

Heute hab ich mich mitm Motobike durch Phnom Penh fahren lassen. Eine Erfahrung sondersgleichen. Dadurch das ich dauernd Angst hatte das meine Knie direkt amputiert werden, konnte ich wenigstens nicht mehr dadrüber nachdenken, dass Rucksäche gerne den Leuten entrissen werden auf so einem Moped.

Man stelle sich folgendes vor: Der durchschnittliche Kambodschaner ist .. 1,40 groß. Allerhöchstens. Nagut, sagen wir mal 1,60. Und dann setzt sich der Matze hinten auf die Sitzfläche. Beim Losfahren hatten wir 10 Minuten einen nicht ganz so stillen Begleiter, der eigentlich nichts gemacht hat ausser herzhaft gelacht. Hinter uns herfahren und herzhaft lachen 🙂 Ein spassiges Volk.

Gut, wenn man einfach mal die Verkehrsregeln die man irgendwann mal gelernt hat vergisst, dann sieht man durchaus ein bissle ein System im Chaos:

  1. Es gibt keine Lücke die zu klein ist
  2. Spuren sind nur Hilfslinien damit man alle 10min sich daran mal wieder grob orientieren
  3. Ampeln werden sogar größtenteils beachtet. Allerdings nur bis die einen wieder Rot haben (und es normalerweise noch so 4-5 Sekunden dauert bis man selber grün hat). Gefahren wird wenn Platz ist
  4. Auch die Gegenspur ist nur auf dem Papier eine Gegenspur. Wenn Platz ist, wird auch dort gefahren. Egal ob in der Mitte eine dicke Betonsperre ist, die das eigentlich verhindern soll
  5. Wenn man auf eine übervolle Kreuzung drauffährt ohne tatsächlich irgendeine Art von Bremsung zu spüren, dann wirds doch recht schnell mulmig im Magen.

Aber, irgendwie funktionierts. Gestern hab ich einen Inder getroffen und in ausgefragt, ob der Verkehr irgendwie vergleichbar wäre mit dem indischen. Er meinte: Nö. Viel zu wenig los.

Gut. So können sich Sichtweisen unterscheiden 🙂

Kleine Nebengeschichte: Beim Schreiben des Artikels läuft neben mir die Waschmaschine. Als gerade das Schleudern anfing, fing diese sich an zu bewegen. Und zwar nicht zu knapp. Man kennt eventuell das Backstein/Waschmaschinen-Video. Nicht ganz so schlimm, aber ähnlich. Sofort waren drei Helfer da und hielten das Ding fest. Es wurde versucht es in die Ursprungsposition zurückzuschieben, aber so eine Waschmaschine ist doch recht unkontrollierbar 🙂 Dann wurde versucht sie mit Handtüchern und ähnlichem zumindest etwas im Lärmpegel zu reduzieren und nach gerade mal 10min war das Schauspiel auch schon wieder vorbei. Aber nur weil der Schleudergang fertig war. Was ein Spaß 🙂