Exemplo n.º 1
0
  @Test
  public void testCollision() throws Exception {
    File fileDir = TestUtils.createTempDir();

    File dataFile = new File(fileDir + File.separator + "0_0_0.data");
    dataFile.deleteOnExit();

    FileOutputStream fw = new FileOutputStream(dataFile.getAbsoluteFile());
    DataOutputStream outputStream = new DataOutputStream(fw);

    /*
     * 4dc968ff0ee35c209572d4777b721587d36fa7b21bdc56b74a3dc0783e7b9518afbfa200a8284bf36e8e4b55b35f427593d849676da0d1555d8360fb5f07fea2
     * and the (different by two bits)
     * 4dc968ff0ee35c209572d4777b721587d36fa7b21bdc56b74a3dc0783e7b9518afbfa202a8284bf36e8e4b55b35f427593d849676da0d1d55d8360fb5f07fea2
     * both have MD5 hash 008ee33a9d58b51cfeb425b0959121c9
     */

    String[] md5collision = {
      "4dc968ff0ee35c209572d4777b721587d36fa7b21bdc56b74a3dc0783e7b9518afbfa200a8284bf36e8e4b55b35f427593d849676da0d1555d8360fb5f07fea2",
      "4dc968ff0ee35c209572d4777b721587d36fa7b21bdc56b74a3dc0783e7b9518afbfa202a8284bf36e8e4b55b35f427593d849676da0d1d55d8360fb5f07fea2"
    };

    outputStream.writeShort(2);
    for (int i = 0; i < 2; i++) {
      String input = md5collision[i];
      byte[] hexInput = ByteUtils.fromHexString(input);
      outputStream.writeInt(hexInput.length);
      outputStream.writeInt(hexInput.length);
      outputStream.write(hexInput);
      outputStream.write(hexInput);
    }
    outputStream.close();
    fw.close();

    File indexFile = new File(fileDir + File.separator + "0_0_0.index");
    indexFile.createNewFile();
    indexFile.deleteOnExit();

    ChunkedFileSet fileSet =
        new ChunkedFileSet(
            fileDir,
            getTempStrategy(),
            NODE_ID,
            VoldemortConfig.DEFAULT_RO_MAX_VALUE_BUFFER_ALLOCATION_SIZE);

    for (int i = 0; i < 2; i++) {
      String input = md5collision[i];
      byte[] hexInput = ByteUtils.fromHexString(input);
      byte[] hexValue = fileSet.readValue(hexInput, 0, 0);
      Assert.assertArrayEquals(hexInput, hexValue);
    }
  }