use of io.stackgres.common.crd.sgcluster.StackGresClusterInstalledExtension in project stackgres by ongres.
the class ContextUtil method toPostgresContext.
public static PostgresContainerContext toPostgresContext(StackGresClusterContainerContext context) {
final StackGresClusterContext clusterContext = context.getClusterContext();
final StackGresCluster cluster = clusterContext.getSource();
ImmutablePostgresContainerContext.Builder contextBuilder = Optional.of(clusterContext.getSource()).map(StackGresCluster::getStatus).map(StackGresClusterStatus::getDbOps).map(StackGresClusterDbOpsStatus::getMajorVersionUpgrade).map(majorVersionUpgradeStatus -> {
String targetVersion = majorVersionUpgradeStatus.getTargetPostgresVersion();
String sourceVersion = majorVersionUpgradeStatus.getSourcePostgresVersion();
String sourceMajorVersion = StackGresComponent.POSTGRESQL.findMajorVersion(sourceVersion);
return ImmutablePostgresContainerContext.builder().from(context).postgresMajorVersion(StackGresComponent.POSTGRESQL.findMajorVersion(targetVersion)).oldMajorVersion(sourceMajorVersion).imageBuildMajorVersion(StackGresComponent.POSTGRESQL.findBuildMajorVersion(targetVersion)).oldImageBuildMajorVersion(StackGresComponent.POSTGRESQL.findBuildMajorVersion(sourceVersion)).postgresVersion(targetVersion).oldPostgresVersion(sourceVersion);
}).orElseGet(() -> {
final String postgresVersion = cluster.getSpec().getPostgres().getVersion();
final String majorVersion = StackGresComponent.POSTGRESQL.findMajorVersion(postgresVersion);
final String buildMajorVersion = StackGresComponent.POSTGRESQL.findBuildMajorVersion(postgresVersion);
return ImmutablePostgresContainerContext.builder().from(context).postgresVersion(postgresVersion).imageBuildMajorVersion(buildMajorVersion).postgresMajorVersion(majorVersion);
});
final List<StackGresClusterInstalledExtension> installedExtensions = Optional.ofNullable(cluster.getSpec()).map(StackGresClusterSpec::getToInstallPostgresExtensions).stream().flatMap(Collection::stream).collect(Collectors.toUnmodifiableList());
contextBuilder.addAllInstalledExtensions(installedExtensions);
return contextBuilder.build();
}
use of io.stackgres.common.crd.sgcluster.StackGresClusterInstalledExtension in project stackgres by ongres.
the class ExtensionManagerTest method testSetExtensionAsPending.
@Test
void testSetExtensionAsPending() throws Exception {
StackGresCluster cluster = getCluster();
StackGresClusterInstalledExtension extension = getInstalledExtension();
when(webClientFactory.create(anyBoolean())).thenReturn(webClient);
when(webClient.getJson(any(), any())).thenReturn(getExtensions());
final String extensionPackageName = ExtensionUtil.getExtensionPackageName(getInstalledExtension());
ExtensionInstaller extensionInstaller = extensionManager.getExtensionInstaller(context(cluster), extension);
extensionInstaller.setExtensionAsPending();
verify(webClientFactory, times(1)).create(anyBoolean());
verify(webClient, times(1)).getJson(any(), any());
verify(webClient, times(1)).getJson(eq(ExtensionUtil.getIndexUri(REPOSITORY)), eq(StackGresExtensions.class));
verify(webClient, times(0)).getInputStream(any());
verify(fileSystemHandler, times(0)).newInputStream(any());
verify(fileSystemHandler, times(1)).createOrReplaceFile(any());
verify(fileSystemHandler, times(1)).createOrReplaceFile(eq(Paths.get(ClusterStatefulSetPath.PG_EXTENSIONS_PATH.path(context(cluster))).resolve(extensionPackageName + ExtensionManager.PENDING_SUFFIX)));
verify(fileSystemHandler, times(0)).createDirectories(any());
verify(fileSystemHandler, times(0)).createOrReplaceSymbolicLink(any(), any());
verify(fileSystemHandler, times(0)).copyOrReplace(any(), any());
verify(fileSystemHandler, times(0)).setPosixFilePermissions(any(), any());
verify(fileSystemHandler, times(0)).deleteIfExists(any());
}
use of io.stackgres.common.crd.sgcluster.StackGresClusterInstalledExtension in project stackgres by ongres.
the class ExtensionManagerTest method testCheckExtensionWillNotOverwrite.
@Test
void testCheckExtensionWillNotOverwrite() throws Exception {
StackGresCluster cluster = getCluster();
when(webClientFactory.create(anyBoolean())).thenReturn(webClient);
when(webClient.getJson(any(), any())).thenReturn(getExtensions());
final String extensionPackageName = ExtensionUtil.getExtensionPackageName(getInstalledExtension());
when(fileSystemHandler.newInputStream(eq(Paths.get(ClusterStatefulSetPath.PG_EXTENSIONS_PATH.path(context(cluster))).resolve(extensionPackageName + ExtensionManager.TGZ_SUFFIX)))).then(invocation -> getClass().getResourceAsStream("/test.tgz"));
when(fileSystemHandler.exists(eq(Paths.get(ClusterStatefulSetPath.PG_EXTENSIONS_PATH.path(context(cluster))).resolve("usr/lib/postgresql/12/lib").resolve("test.so")))).thenReturn(false);
StackGresClusterInstalledExtension extension = getInstalledExtension();
Assertions.assertFalse(extensionManager.getExtensionInstaller(context(cluster), extension).doesInstallOverwriteAnySharedLibrary());
verify(webClientFactory, times(1)).create(anyBoolean());
verify(webClient, times(1)).getJson(any(), any());
verify(webClient, times(1)).getJson(eq(ExtensionUtil.getIndexUri(REPOSITORY)), eq(StackGresExtensions.class));
verify(webClient, times(0)).getInputStream(eq(ExtensionUtil.getExtensionPackageUri(REPOSITORY, extension, getExtensionMetadata())));
verify(fileSystemHandler, times(1)).newInputStream(any());
verify(fileSystemHandler, times(1)).newInputStream(eq(Paths.get(ClusterStatefulSetPath.PG_EXTENSIONS_PATH.path(context(cluster))).resolve(extensionPackageName + ExtensionManager.TGZ_SUFFIX)));
verify(fileSystemHandler, times(0)).createOrReplaceFile(any());
verify(fileSystemHandler, times(0)).createDirectories(any());
verify(fileSystemHandler, times(0)).createOrReplaceSymbolicLink(any(), any());
verify(fileSystemHandler, times(0)).copyOrReplace(any(), any());
verify(fileSystemHandler, times(0)).setPosixFilePermissions(any(), any());
verify(fileSystemHandler, times(0)).deleteIfExists(any());
}
use of io.stackgres.common.crd.sgcluster.StackGresClusterInstalledExtension in project stackgres by ongres.
the class ExtensionManagerTest method testUninstallExtension.
@Test
void testUninstallExtension() throws Exception {
StackGresCluster cluster = getCluster();
StackGresClusterExtension extension = getClusterExtension();
final String extensionPackageName = ExtensionUtil.getExtensionPackageName(getInstalledExtension());
when(fileSystemHandler.newInputStream(eq(Paths.get(ClusterStatefulSetPath.PG_EXTENSIONS_PATH.path(context(cluster))).resolve(extensionPackageName + ExtensionManager.TGZ_SUFFIX)))).then(invocation -> getClass().getResourceAsStream("/test.tgz"));
StackGresClusterInstalledExtension installedExtension = getInstalledExtension();
extensionManager.getExtensionUninstaller(context(cluster), installedExtension).uninstallExtension();
verify(webClientFactory, times(0)).create(anyBoolean());
verify(webClient, times(0)).getJson(eq(ExtensionUtil.getIndexUri(REPOSITORY)), eq(StackGresExtensions.class));
verify(webClient, times(0)).getInputStream(eq(ExtensionUtil.getExtensionPackageUri(REPOSITORY, extension, getExtensionMetadata())));
verify(fileSystemHandler, times(0)).newInputStream(eq(Paths.get(ClusterStatefulSetPath.PG_EXTENSIONS_PATH.path(context(cluster))).resolve(extensionPackageName + ExtensionManager.INSTALLED_SUFFIX)));
verify(fileSystemHandler, times(1)).newInputStream(eq(Paths.get(ClusterStatefulSetPath.PG_EXTENSIONS_PATH.path(context(cluster))).resolve(extensionPackageName + ExtensionManager.TGZ_SUFFIX)));
verify(fileSystemHandler, times(0)).createOrReplaceFile(any());
verify(fileSystemHandler, times(0)).createDirectories(any());
verify(fileSystemHandler, times(0)).createOrReplaceSymbolicLink(any(), any());
verify(fileSystemHandler, times(0)).copyOrReplace(any(), any());
verify(fileSystemHandler, times(0)).setPosixFilePermissions(any(), any());
verify(fileSystemHandler, times(7)).deleteIfExists(any());
verify(fileSystemHandler, times(1)).deleteIfExists(eq(Paths.get(ClusterStatefulSetPath.PG_EXTENSIONS_PATH.path(context(cluster))).resolve("usr/share/postgresql/12/extension").resolve("test.control")));
verify(fileSystemHandler, times(1)).deleteIfExists(eq(Paths.get(ClusterStatefulSetPath.PG_EXTENSIONS_PATH.path(context(cluster))).resolve("usr/share/postgresql/12/extension").resolve("test.sql")));
verify(fileSystemHandler, times(1)).deleteIfExists(eq(Paths.get(ClusterStatefulSetPath.PG_EXTENSIONS_PATH.path(context(cluster))).resolve(extensionPackageName + ExtensionManager.TGZ_SUFFIX)));
verify(fileSystemHandler, times(1)).deleteIfExists(eq(Paths.get(ClusterStatefulSetPath.PG_EXTENSIONS_PATH.path(context(cluster))).resolve(extensionPackageName + ExtensionManager.SHA256_SUFFIX)));
verify(fileSystemHandler, times(1)).deleteIfExists(eq(Paths.get(ClusterStatefulSetPath.PG_EXTENSIONS_PATH.path(context(cluster))).resolve(extensionPackageName + ExtensionManager.PENDING_SUFFIX)));
verify(fileSystemHandler, times(1)).deleteIfExists(eq(Paths.get(ClusterStatefulSetPath.PG_RELOCATED_LIB_PATH.path(context(cluster))).resolve(extensionPackageName + ExtensionManager.LINKS_CREATED_SUFFIX)));
verify(fileSystemHandler, times(1)).deleteIfExists(eq(Paths.get(ClusterStatefulSetPath.PG_EXTENSIONS_PATH.path(context(cluster))).resolve(extensionPackageName + ExtensionManager.INSTALLED_SUFFIX)));
}
use of io.stackgres.common.crd.sgcluster.StackGresClusterInstalledExtension in project stackgres by ongres.
the class ExtensionManagerTest method testDownloadAndExtractExtension.
@Test
void testDownloadAndExtractExtension() throws Exception {
when(webClientFactory.create(anyBoolean())).thenReturn(webClient);
when(webClient.getJson(any(), any())).thenReturn(getExtensions());
when(webClient.getInputStream(any())).then(invocation -> getClass().getResourceAsStream("/test.tar"));
StackGresCluster cluster = getCluster();
StackGresClusterInstalledExtension extension = getInstalledExtension();
extensionManager.getExtensionInstaller(context(cluster), extension).downloadAndExtract();
verify(webClientFactory, times(2)).create(anyBoolean());
verify(webClient, times(1)).getJson(any(), any());
verify(webClient, times(1)).getJson(eq(ExtensionUtil.getIndexUri(REPOSITORY)), eq(StackGresExtensions.class));
verify(webClient, times(1)).getInputStream(eq(ExtensionUtil.getExtensionPackageUri(REPOSITORY, extension, getExtensionMetadata())));
verify(fileSystemHandler, times(0)).newInputStream(any());
verify(fileSystemHandler, times(0)).createOrReplaceFile(any());
verify(fileSystemHandler, times(2)).createDirectories(any());
verify(fileSystemHandler, times(2)).createDirectories(eq(Paths.get(ClusterStatefulSetPath.PG_EXTENSIONS_PATH.path(context(cluster)))));
verify(fileSystemHandler, times(0)).createOrReplaceSymbolicLink(any(), any());
verify(fileSystemHandler, times(2)).copyOrReplace(any(), any());
verify(fileSystemHandler, times(1)).copyOrReplace(any(), eq(Paths.get(ClusterStatefulSetPath.PG_EXTENSIONS_PATH.path(context(cluster))).resolve("test.tgz.sha256")));
verify(fileSystemHandler, times(1)).copyOrReplace(any(), eq(Paths.get(ClusterStatefulSetPath.PG_EXTENSIONS_PATH.path(context(cluster))).resolve("test.tgz")));
verify(fileSystemHandler, times(2)).setPosixFilePermissions(any(), any());
verify(fileSystemHandler, times(1)).setPosixFilePermissions(eq(Paths.get(ClusterStatefulSetPath.PG_EXTENSIONS_PATH.path(context(cluster))).resolve("test.tgz.sha256")), eq(ImmutableSet.of(PosixFilePermission.OWNER_READ, PosixFilePermission.OWNER_WRITE, PosixFilePermission.GROUP_READ, PosixFilePermission.OTHERS_READ)));
verify(fileSystemHandler, times(1)).setPosixFilePermissions(eq(Paths.get(ClusterStatefulSetPath.PG_EXTENSIONS_PATH.path(context(cluster))).resolve("test.tgz")), eq(ImmutableSet.of(PosixFilePermission.OWNER_READ, PosixFilePermission.OWNER_WRITE, PosixFilePermission.GROUP_READ, PosixFilePermission.OTHERS_READ)));
verify(fileSystemHandler, times(0)).deleteIfExists(any());
}
Aggregations