@Override
    public String getProperty(String name) {
        Queue<Driver> queue = new LinkedList<>();
        queue.add(this);
        while (!queue.isEmpty()) {
            Driver driver = queue.remove();
            String property = driver.properties().get(name);
            if (property != null) {
                return property;
            } else if (driver.parents() != null) {
                queue.addAll(driver.parents());
            }
        }
        return null;
    }
@Test
    public void testGetProperty() throws Exception {
        DefaultDriver root = new DefaultDriver(ROOT, Lists.newArrayList(), MFR, HW, SW,
                ImmutableMap.of(), ImmutableMap.of());

        DefaultDriver child = new DefaultDriver(CHILD, Lists.newArrayList(root), MFR, HW, SW,
                ImmutableMap.of(), ImmutableMap.of(KEY, VALUE));

        DefaultDriver grandChild = new DefaultDriver(GRAND_CHILD, Lists.newArrayList(child),
                MFR, HW, SW, ImmutableMap.of(), ImmutableMap.of());

        assertNull(root.getProperty(KEY));
        assertEquals(VALUE, child.getProperty(KEY));
        assertEquals(VALUE, grandChild.getProperty(KEY));
    }