Merge changes Ib99cb819,Iae54ba77,I79e772d5

* changes:
  Update Gerrit to 3.3.1
  Fix issue when restarting with incompletely created index
  Wrap too long lines in test code
diff --git a/container-images/gerrit-init/tools/gerrit-initializer/initializer/config/init_config.py b/container-images/gerrit-init/tools/gerrit-initializer/initializer/config/init_config.py
index 13e7ef4..ab39275 100644
--- a/container-images/gerrit-init/tools/gerrit-initializer/initializer/config/init_config.py
+++ b/container-images/gerrit-init/tools/gerrit-initializer/initializer/config/init_config.py
@@ -22,6 +22,7 @@
         self.downloaded_plugins = list()
         self.plugin_cache_enabled = False
         self.packaged_plugins = set()
+        self.install_as_library = set()
         self.plugin_cache_dir = None
 
         self.ca_cert_path = True
@@ -40,6 +41,8 @@
             self.downloaded_plugins = config["downloadedPlugins"]
         if "packagedPlugins" in config:
             self.packaged_plugins = set(config["packagedPlugins"])
+        if "installAsLibrary" in config:
+            self.install_as_library = set(config["installAsLibrary"])
         if "pluginCache" in config:
             self.plugin_cache_enabled = config["pluginCache"]
         if "pluginCacheDir" in config and config["pluginCacheDir"]:
diff --git a/container-images/gerrit-init/tools/gerrit-initializer/initializer/tasks/download_plugins.py b/container-images/gerrit-init/tools/gerrit-initializer/initializer/tasks/download_plugins.py
index d2c8e16..2bc2110 100755
--- a/container-images/gerrit-init/tools/gerrit-initializer/initializer/tasks/download_plugins.py
+++ b/container-images/gerrit-init/tools/gerrit-initializer/initializer/tasks/download_plugins.py
@@ -42,6 +42,7 @@
         self.required_plugins = self._get_required_plugins()
 
         self.plugin_dir = os.path.join(site, "plugins")
+        self.lib_dir = os.path.join(site, "lib")
         self.plugins_changed = False
 
     def _create_plugins_dir(self):
@@ -102,6 +103,18 @@
                 os.remove(os.path.join(self.plugin_dir, plugin))
                 LOG.info("Removed plugin %s", plugin)
 
+    def _symlink_plugins_to_lib(self):
+        if not os.path.exists(self.lib_dir):
+            os.makedirs(self.lib_dir)
+        for lib in self.config.install_as_library:
+            plugin_path = os.path.join(self.plugin_dir, "%s.jar" % lib)
+            if os.path.exists(plugin_path):
+                os.symlink(plugin_path, os.path.join(self.lib_dir, "%s.jar" % lib))
+            else:
+                raise FileNotFoundError(
+                    "Could not find plugin %s to symlink to lib-directory." % lib
+                )
+
     def execute(self):
         self._create_plugins_dir()
         self._remove_unwanted_plugins()
@@ -110,6 +123,8 @@
         for plugin in self.config.downloaded_plugins:
             self._install_plugin(plugin)
 
+        self._symlink_plugins_to_lib()
+
     def _download_plugin(self, plugin, target):
         LOG.info("Downloading %s plugin to %s", plugin["name"], target)
         try:
diff --git a/helm-charts/gerrit-replica/templates/gerrit-replica.configmap.yaml b/helm-charts/gerrit-replica/templates/gerrit-replica.configmap.yaml
index 9ba9e1b..12d591e 100644
--- a/helm-charts/gerrit-replica/templates/gerrit-replica.configmap.yaml
+++ b/helm-charts/gerrit-replica/templates/gerrit-replica.configmap.yaml
@@ -34,7 +34,7 @@
 data:
   gerrit-init.yaml: |-
     {{ if .Values.caCert -}}
-    caCertPath: /var/mnt/etc/ca.crt
+    caCertPath: /var/config/ca.crt
     {{- end }}
     pluginCache: {{ .Values.gerritReplica.plugins.cache.enabled }}
     pluginCacheDir: /var/mnt/plugins
@@ -46,3 +46,7 @@
     downloadedPlugins:
 {{ toYaml .Values.gerritReplica.plugins.downloaded | indent 6 }}
     {{- end }}
+    {{- if .Values.gerritReplica.plugins.installAsLibrary }}
+    installAsLibrary:
+{{ toYaml .Values.gerritReplica.plugins.installAsLibrary | indent 6 }}
+    {{- end }}
diff --git a/helm-charts/gerrit-replica/values.yaml b/helm-charts/gerrit-replica/values.yaml
index 58fafd0..aa97ffd 100644
--- a/helm-charts/gerrit-replica/values.yaml
+++ b/helm-charts/gerrit-replica/values.yaml
@@ -283,7 +283,7 @@
     # - name: delete-project
     #   url: https://example.com/gerrit-plugins/delete-project.jar
     #   sha1:
-
+    installAsLibrary: []
     # Only downloaded plugins will be cached. This will be ignored, if no plugins
     # are downloaded.
     cache:
diff --git a/helm-charts/gerrit/templates/gerrit.configmap.yaml b/helm-charts/gerrit/templates/gerrit.configmap.yaml
index 1e6b744..b4ec036 100644
--- a/helm-charts/gerrit/templates/gerrit.configmap.yaml
+++ b/helm-charts/gerrit/templates/gerrit.configmap.yaml
@@ -46,3 +46,7 @@
     downloadedPlugins:
 {{ toYaml .Values.gerrit.plugins.downloaded | indent 6 }}
     {{- end }}
+    {{- if .Values.gerrit.plugins.installAsLibrary }}
+    installAsLibrary:
+{{ toYaml .Values.gerrit.plugins.installAsLibrary | indent 6 }}
+    {{- end }}
diff --git a/helm-charts/gerrit/templates/gerrit.stateful-set.yaml b/helm-charts/gerrit/templates/gerrit.stateful-set.yaml
index e22c71b..4334e60 100644
--- a/helm-charts/gerrit/templates/gerrit.stateful-set.yaml
+++ b/helm-charts/gerrit/templates/gerrit.stateful-set.yaml
@@ -121,7 +121,7 @@
         {{ if .Values.caCert -}}
         - name: tls-ca
           subPath: ca.crt
-          mountPath: "/var/mnt/etc/ca.crt"
+          mountPath: "/var/config/ca.crt"
         {{- end }}
       containers:
       - name: gerrit
diff --git a/helm-charts/gerrit/values.yaml b/helm-charts/gerrit/values.yaml
index a61b777..cc43bcf 100644
--- a/helm-charts/gerrit/values.yaml
+++ b/helm-charts/gerrit/values.yaml
@@ -185,7 +185,7 @@
     # - name: delete-project
     #   url: https://example.com/gerrit-plugins/delete-project.jar
     #   sha1:
-
+    installAsLibrary: []
     # Only downloaded plugins will be cached. This will be ignored, if no plugins
     # are downloaded.
     cache:
diff --git a/tests/container-images/gerrit-init/test_container_integration_gerrit_init.py b/tests/container-images/gerrit-init/test_container_integration_gerrit_init.py
index 566f8f7..3a4c369 100644
--- a/tests/container-images/gerrit-init/test_container_integration_gerrit_init.py
+++ b/tests/container-images/gerrit-init/test_container_integration_gerrit_init.py
@@ -158,3 +158,49 @@
             assert os.path.exists(
                 os.path.join(tmp_site_dir, "plugins", "%s.jar" % plugin)
             )
+
+    def test_libraries_are_symlinked(
+        self, container_run_endless, init_config_dir, tmp_site_dir
+    ):
+        with open(os.path.join(init_config_dir, "init.yaml"), "w") as f:
+            yaml.dump(
+                {"packagedPlugins": ["hooks"], "installAsLibrary": ["hooks"]},
+                f,
+                default_flow_style=False,
+            )
+
+        exit_code, _ = container_run_endless.exec_run(
+            "python3 /var/tools/gerrit-initializer -s /var/gerrit -c /var/config/init.yaml init"
+        )
+        assert exit_code == 0
+
+        assert os.path.exists(os.path.join(tmp_site_dir, "plugins", "%s.jar" % "hooks"))
+        assert os.path.islink(os.path.join(tmp_site_dir, "lib", "%s.jar" % "hooks"))
+
+        exit_code, output = container_run_endless.exec_run(
+            "readlink -f /var/gerrit/lib/hooks.jar"
+        )
+        assert exit_code == 0
+        assert output.decode("utf-8").strip() == "/var/gerrit/plugins/hooks.jar"
+
+    def test_library_symlink_fails_without_plugin(
+        self, container_run_endless, init_config_dir
+    ):
+        with open(os.path.join(init_config_dir, "init.yaml"), "w") as f:
+            yaml.dump(
+                {"packagedPlugins": ["hooks"], "installAsLibrary": ["saml"]},
+                f,
+                default_flow_style=False,
+            )
+
+        exit_code, output = container_run_endless.exec_run(
+            "python3 /var/tools/gerrit-initializer -s /var/gerrit -c /var/config/init.yaml init"
+        )
+        assert exit_code == 1
+        assert (
+            output.decode("utf-8")
+            .strip()
+            .endswith(
+                "FileNotFoundError: Could not find plugin saml to symlink to lib-directory."
+            )
+        )