### Question:
StageSpec implements Serializable { @Override public int hashCode() { return Objects.hash(name, plugin, inputSchemas, getInputStages(), outputSchema, errorSchema, stageLoggingEnabled, processTimingEnabled, maxPreviewRecords); } private  StageSpec(String name, PluginSpec plugin, Map<String, Schema> inputSchemas, @Nullable Schema outputSchema,
                    Schema errorSchema, Map<String, Schema> portSchemas, Map<String, Port> outputPorts,
                    boolean stageLoggingEnabled, boolean processTimingEnabled, int maxPreviewRecords); String getName(); PluginSpec getPlugin(); String getPluginType(); Map<String, Schema> getInputSchemas(); Set<String> getInputStages(); @Nullable Schema getOutputSchema(); Map<String, Port> getOutputPorts(); @Nullable Schema getErrorSchema(); boolean isStageLoggingEnabled(); boolean isProcessTimingEnabled(); int getMaxPreviewRecords(); @Override boolean equals(Object o); @Override int hashCode(); @Override String toString(); static Builder builder(String name, PluginSpec plugin);  }### Answer:
@Test public void testHashCode() { StageSpec spec1 = StageSpec.builder("sink", new PluginSpec(BatchSink.PLUGIN_TYPE, "mocksink", Collections.emptyMap(), ARTIFACT_ID)) .addInputSchemas(ImmutableMap.of("source1", SCHEMA_A, "source2", SCHEMA_B)) .build(); StageSpec spec2 = StageSpec.builder("sink", new PluginSpec(BatchSink.PLUGIN_TYPE, "mocksink", Collections.emptyMap(), ARTIFACT_ID)) .addInputSchema("source1", SCHEMA_A) .addInputSchema("source2", SCHEMA_B) .build(); Assert.assertEquals(spec1.hashCode(), spec2.hashCode()); }