    @Test
    public void findNode() throws Exception {

        final Trie trie = Trie.createRootNode();

        assertNull(trie.findNode(FocusString.create("hello")));

        final Trie putNode = trie.put(FocusString.create("hello"));
        final Trie foundNode = trie.findNode(FocusString.create("hello"));

        assertNotNull(putNode);
        assertNotNull(foundNode);
        assertEquals(putNode, foundNode);

        // Substring matching: doesn't happen (except for subdomains, we test those later)
        assertNull(trie.findNode(FocusString.create("hell")));
        assertNull(trie.findNode(FocusString.create("hellop")));

        trie.put(FocusString.create("hellohello"));

        // Ensure both old and new overlapping strings can still be found
        assertNotNull(trie.findNode(FocusString.create("hello")));
        assertNotNull(trie.findNode(FocusString.create("hellohello")));

        // These still don't match:
        assertNull(trie.findNode(FocusString.create("hell")));
        assertNull(trie.findNode(FocusString.create("hellop")));

        // Domain specific / partial domain tests:
        trie.put(FocusString.create("foo.com").reverse());

        // Domain and subdomain can be found
        assertNotNull(trie.findNode(FocusString.create("foo.com").reverse()));
        assertNotNull(trie.findNode(FocusString.create("bar.foo.com").reverse()));
        // But other domains with some overlap don't match
        assertNull(trie.findNode(FocusString.create("bar-foo.com").reverse()));
        assertNull(trie.findNode(FocusString.create("oo.com").reverse()));
    }