@Override
    public int hashCode() {
        return Objects.hash(klass, version, type);
    }
@SuppressWarnings("rawtypes")
    @Test
    public void testPluginDescEquality() {
        PluginDesc<SinkConnector> connectorDescPluginPath = new PluginDesc<>(
                SinkConnector.class,
                snapshotVersion,
                PluginType.SINK,
                pluginLoader
        );

        PluginDesc<SinkConnector> connectorDescClasspath = new PluginDesc<>(
                SinkConnector.class,
                snapshotVersion,
                PluginType.SINK,
                systemLoader
        );

        assertEquals(connectorDescPluginPath, connectorDescClasspath);
        assertEquals(connectorDescPluginPath.hashCode(), connectorDescClasspath.hashCode());

        PluginDesc<Converter> converterDescPluginPath = new PluginDesc<>(
                Converter.class,
                noVersion,
                PluginType.CONVERTER,
                pluginLoader
        );

        PluginDesc<Converter> converterDescClasspath = new PluginDesc<>(
                Converter.class,
                noVersion,
                PluginType.CONVERTER,
                systemLoader
        );

        assertEquals(converterDescPluginPath, converterDescClasspath);
        assertEquals(converterDescPluginPath.hashCode(), converterDescClasspath.hashCode());

        PluginDesc<Transformation> transformDescPluginPath = new PluginDesc<>(
                Transformation.class,
                null,
                PluginType.TRANSFORMATION,
                pluginLoader
        );

        PluginDesc<Transformation> transformDescClasspath = new PluginDesc<>(
                Transformation.class,
                noVersion,
                PluginType.TRANSFORMATION,
                pluginLoader
        );

        assertNotEquals(transformDescPluginPath, transformDescClasspath);
    }