@Test
  public void testEncodeDecodeCommonStats() throws IOException {
    CommonStatsFlags flags = new CommonStatsFlags();
    Flag[] values = CommonStatsFlags.Flag.values();
    assertThat(flags.anySet(), equalTo(true));

    for (Flag flag : values) {
      flags.set(flag, false);
    }
    assertThat(flags.anySet(), equalTo(false));
    for (Flag flag : values) {
      flags.set(flag, true);
    }
    assertThat(flags.anySet(), equalTo(true));
    Random random = getRandom();
    flags.set(values[random.nextInt(values.length)], false);
    assertThat(flags.anySet(), equalTo(true));

    {
      BytesStreamOutput out = new BytesStreamOutput();
      flags.writeTo(out);
      out.close();
      BytesReference bytes = out.bytes();
      CommonStatsFlags readStats =
          CommonStatsFlags.readCommonStatsFlags(new BytesStreamInput(bytes));
      for (Flag flag : values) {
        assertThat(flags.isSet(flag), equalTo(readStats.isSet(flag)));
      }
    }

    {
      for (Flag flag : values) {
        flags.set(flag, random.nextBoolean());
      }
      BytesStreamOutput out = new BytesStreamOutput();
      flags.writeTo(out);
      out.close();
      BytesReference bytes = out.bytes();
      CommonStatsFlags readStats =
          CommonStatsFlags.readCommonStatsFlags(new BytesStreamInput(bytes));
      for (Flag flag : values) {
        assertThat(flags.isSet(flag), equalTo(readStats.isSet(flag)));
      }
    }
  }
 @Override
 public void writeTo(StreamOutput out) throws IOException {
   super.writeTo(out);
   flags.writeTo(out);
 }