@Test
  public void testScanRecordVariantFilter() throws Exception {
    IdGenerator idGenerator = new IdGeneratorImpl();

    final Map<String, String> variantProperties = new HashMap<String, String>();
    variantProperties.put("lang", "en");
    variantProperties.put("branch", null);

    RecordId recordId = idGenerator.newRecordId("foo");

    RecordScan scan = new RecordScan();
    scan.setRecordFilter(new RecordVariantFilter(recordId, variantProperties));

    byte[] data = scanToBytes(scan);
    RecordScan parsedScan = scanFromBytes(data);

    assertNotNull(parsedScan.getRecordFilter());
    assertTrue(parsedScan.getRecordFilter() instanceof RecordVariantFilter);
    assertEquals(
        recordId.getMaster(),
        ((RecordVariantFilter) parsedScan.getRecordFilter()).getMasterRecordId());
    assertEquals(
        variantProperties,
        ((RecordVariantFilter) parsedScan.getRecordFilter()).getVariantProperties());

    // Check json
    JsonNode node = new ObjectMapper().readTree(data);
    assertEquals(
        "org.lilyproject.repository.api.filter.RecordVariantFilter",
        node.get("recordFilter").get("@class").getTextValue());
    assertEquals("USER.foo", node.get("recordFilter").get("recordId").getTextValue());
    assertEquals(
        "en", node.get("recordFilter").get("variantProperties").get("lang").getTextValue());
    assertEquals(
        null, node.get("recordFilter").get("variantProperties").get("branch").getTextValue());
  }