### Question:
PipelineOptions implements Options { public PipelineOptions() { super(); } PipelineOptions();  PipelineOptions(PipelineOptions other);  PipelineOptions(JsonObject json); @Override JsonObject toJson(); String getName(); PipelineOptions setName(String name); JsonObject getPump(); PipelineOptions setPump(JsonObject pump); JsonArray getProcessors(); PipelineOptions setProcessors(JsonArray processors); JsonObject getSink(); PipelineOptions setSink(JsonObject sink); String getDeployChannel(); PipelineOptions setDeployChannel(String deployChannel); @Override boolean equals(Object o); @Override int hashCode(); @Override String toString(); static final String DEFAULT_NAME; }### Answer:
@Test @DisplayName("Validate Pipeline options") void testPipelineOptions() { new PipelineOptionsConverter(); String badStr = "{\"name\": 10, \"type\": 20, \"pump\": 100, \"processors\": \"test\", \"sink\": false}"; String optStr = "{\"deployChannel\":\"test\",\"name\": \"name\", \"pump\": {}, \"processors\": [{},{}], \"sink\":{}}"; PipelineOptions optNull = new PipelineOptions() .setDeployChannel(null) .setName(null) .setPump(null) .setProcessors(null) .setSink(null); PipelineOptions optObj = new PipelineOptions() .setDeployChannel("test") .setName("name") .setPump(obj()) .setProcessors(arr().add(obj()).add(obj())) .setSink(obj()); JsonObject optJson = new JsonObject(optStr); assertThat(new PipelineOptions(new JsonObject(badStr))).isEqualTo(new PipelineOptions()); assertThat(optNull.toJson()).isEqualTo(obj()); assertThat(optObj).isEqualTo(optObj); assertThat(optObj).isNotEqualTo(optNull); assertThat(optObj).isEqualTo(new PipelineOptions(optJson)); assertThat(optObj).isEqualTo(new PipelineOptions(optObj)); assertThat(optObj.toString()).isEqualTo(new PipelineOptions(optJson).toString()); assertThat(optObj.hashCode()).isEqualTo(new PipelineOptions(optJson).hashCode()); assertThat(optObj).isNotEqualTo(null); assertThat(optObj).isNotEqualTo(new Object()); assertThat(optObj.toJson()).isEqualTo(optJson); }