package org.cubedb.core.tiny;

import static org.junit.Assert.assertEquals;

import com.esotericsoftware.kryo.Kryo;
import com.esotericsoftware.kryo.io.Input;
import com.esotericsoftware.kryo.io.Output;
import org.apache.commons.io.output.ByteArrayOutputStream;
import org.cubedb.core.BaseMetricTest;
import org.junit.Test;

import java.io.ByteArrayInputStream;

/** Created by krash on 28.06.17. */
public class TinyMetricTest extends BaseMetricTest {
  @Override
  protected TinyMetric createMetric() {
    return new TinyMetric();
  }

  @Test
  public void testSerDe() {
    TinyMetric metric = createMetric();
    for (int i = 1; i <= 10; i++) {
      metric.append(i);
    }
    Kryo kryo = new Kryo();
    ByteArrayOutputStream bao = new ByteArrayOutputStream();
    Output output = new Output(bao);
    kryo.writeObject(output, metric);
    output.close();
    TinyMetric deser =
        kryo.readObject(new Input(new ByteArrayInputStream(bao.toByteArray())), TinyMetric.class);
    assertEquals(metric.size(), deser.size());
    assertEquals(metric.getNumRecords(), deser.getNumRecords());
    for (int i = 0; i < metric.getNumRecords(); i++) {
      assertEquals(metric.get(i), deser.get(i));
    }
  }
}