Skip to content

Commit 72918ae

Browse files
authored
Merge pull request #91 from shift7-ch/86-katta-integration-tests-refactoring-part-2
86 katta integration tests refactoring part 2
2 parents 608540b + 2d14bdf commit 72918ae

File tree

8 files changed

+197
-33
lines changed

8 files changed

+197
-33
lines changed

hub/src/main/java/cloud/katta/protocols/hub/HubSession.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import ch.cyberduck.core.ListService;
1313
import ch.cyberduck.core.LocaleFactory;
1414
import ch.cyberduck.core.LoginCallback;
15+
import ch.cyberduck.core.OAuthTokens;
1516
import ch.cyberduck.core.PasswordStoreFactory;
1617
import ch.cyberduck.core.Profile;
1718
import ch.cyberduck.core.ProtocolFactory;
@@ -70,8 +71,7 @@ public class HubSession extends HttpSession<HubApiClient> {
7071

7172
private final HubVaultRegistry registry = new HubVaultRegistry();
7273

73-
private final HubVaultListService vaults = new HubVaultListService(protocols,
74-
this, trust, key, registry, keychain);
74+
private HubVaultListService vaults;
7575

7676
/**
7777
* Interceptor for OpenID connect flow
@@ -150,6 +150,9 @@ public void login(final LoginCallback prompt, final CancelCallback cancel) throw
150150
new DeviceKeysServiceImpl(keychain).getOrCreateDeviceKeys(host, setup), setup);
151151
log.debug("Retrieved user keys {}", userKeys);
152152
// Ensure vaults are registered
153+
final OAuthTokens tokens = new OAuthTokens(credentials.getOauth().getAccessToken(), credentials.getOauth().getRefreshToken(), credentials.getOauth().getExpiryInMilliseconds(),
154+
credentials.getOauth().getIdToken());
155+
vaults = new HubVaultListService(protocols, this, trust, key, registry, tokens);
153156
vaults.list(Home.ROOT, new DisabledListProgressListener());
154157
}
155158
catch(SecurityFailure e) {

hub/src/main/java/cloud/katta/protocols/hub/HubVaultListService.java

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66

77
import ch.cyberduck.core.AttributedList;
88
import ch.cyberduck.core.Host;
9-
import ch.cyberduck.core.HostPasswordStore;
109
import ch.cyberduck.core.ListProgressListener;
1110
import ch.cyberduck.core.ListService;
1211
import ch.cyberduck.core.OAuthTokens;
@@ -56,16 +55,16 @@ public class HubVaultListService implements ListService {
5655
private final X509TrustManager trust;
5756
private final X509KeyManager key;
5857
private final VaultRegistry registry;
59-
private final HostPasswordStore keychain;
58+
private final OAuthTokens tokens;
6059

6160
public HubVaultListService(final ProtocolFactory protocols, final HubSession session,
62-
final X509TrustManager trust, final X509KeyManager key, final VaultRegistry registry, final HostPasswordStore keychain) {
61+
final X509TrustManager trust, final X509KeyManager key, final VaultRegistry registry, final OAuthTokens tokens) {
6362
this.protocols = protocols;
6463
this.session = session;
6564
this.trust = trust;
6665
this.key = key;
6766
this.registry = registry;
68-
this.keychain = keychain;
67+
this.tokens = tokens;
6968
}
7069

7170
@Override
@@ -86,10 +85,8 @@ public AttributedList<Path> list(final Path directory, final ListProgressListene
8685
// Find storage configuration in vault metadata
8786
final VaultServiceImpl vaultService = new VaultServiceImpl(session);
8887
final UvfMetadataPayload vaultMetadata = vaultService.getVaultMetadataJWE(vaultDto.getId(), userKeys);
89-
final Host bookmark = vaultService.getStorageBackend(protocols, configDto, vaultDto.getId(), vaultMetadata.storage());
90-
final OAuthTokens tokens = keychain.findOAuthTokens(session.getHost());
91-
log.debug("Use OAuth tokens {} from {}", tokens, session.getHost());
92-
bookmark.getCredentials().withOauth(tokens);
88+
final Host bookmark = vaultService.getStorageBackend(protocols, configDto, vaultDto.getId(),
89+
vaultMetadata.storage(), tokens);
9390
log.debug("Configured {} for vault {}", bookmark, vaultDto);
9491
final Session<?> storage = SessionFactory.create(bookmark, trust, key);
9592
final HubUVFVault vault = new HubUVFVault(storage, new DefaultPathHomeFeature(bookmark).find());

hub/src/main/java/cloud/katta/workflows/CreateVaultService.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import ch.cyberduck.core.Host;
1111
import ch.cyberduck.core.HostPasswordStore;
1212
import ch.cyberduck.core.HostUrlProvider;
13+
import ch.cyberduck.core.OAuthTokens;
1314
import ch.cyberduck.core.PasswordStoreFactory;
1415
import ch.cyberduck.core.Path;
1516
import ch.cyberduck.core.ProtocolFactory;
@@ -125,18 +126,19 @@ public void createVault(final UserKeys userKeys, final StorageProfileDtoWrapper
125126
.region(metadataPayload.storage().getRegion());
126127
log.debug("Created storage dto {}", storageDto);
127128

129+
final HostPasswordStore keychain = PasswordStoreFactory.get();
130+
131+
final OAuthTokens tokens = keychain.findOAuthTokens(hubSession.getHost());
128132
final Host bookmark = new VaultServiceImpl(vaultResource, storageProfileResource).getStorageBackend(ProtocolFactory.get(),
129-
configResource.apiConfigGet(), vaultDto.getId(), metadataPayload.storage());
133+
configResource.apiConfigGet(), vaultDto.getId(), metadataPayload.storage(), tokens);
130134
if(storageProfileWrapper.getStsEndpoint() == null) {
131135
// permanent: template upload into existing bucket from client (not backend)
132-
133136
templateUploadService.uploadTemplate(bookmark, metadataPayload, storageDto, hashedRootDirId);
134137
}
135138
else {
136-
final HostPasswordStore keychain = PasswordStoreFactory.get();
137139
// non-permanent: pass STS tokens (restricted by inline policy) to hub backend and have bucket created from there
138140
final TemporaryAccessTokens stsTokens = stsInlinePolicyService.getSTSTokensFromAccessTokenWithCreateBucketInlinePolicy(
139-
keychain.findOAuthTokens(hubSession.getHost()).getAccessToken(),
141+
tokens.getAccessToken(),
140142
storageProfileWrapper.getStsRoleArnClient(),
141143
vaultDto.getId().toString(),
142144
storageProfileWrapper.getStsEndpoint(),

hub/src/main/java/cloud/katta/workflows/VaultService.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
import java.util.UUID;
1010

11+
import ch.cyberduck.core.OAuthTokens;
1112
import ch.cyberduck.core.ProtocolFactory;
1213

1314
import cloud.katta.client.ApiException;
@@ -54,5 +55,5 @@ public interface VaultService {
5455
* @throws AccessException Unsupported backend storage protocol
5556
* @throws ApiException Server error accessing storage profile
5657
*/
57-
Host getStorageBackend(final ProtocolFactory protocols, final ConfigDto configDto, UUID vaultId, VaultMetadataJWEBackendDto metadata) throws AccessException, ApiException;
58+
Host getStorageBackend(final ProtocolFactory protocols, final ConfigDto configDto, UUID vaultId, VaultMetadataJWEBackendDto metadata, final OAuthTokens tokens) throws AccessException, ApiException;
5859
}

hub/src/main/java/cloud/katta/workflows/VaultServiceImpl.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44

55
package cloud.katta.workflows;
66

7+
import ch.cyberduck.core.Credentials;
78
import ch.cyberduck.core.Host;
9+
import ch.cyberduck.core.OAuthTokens;
810
import ch.cyberduck.core.Profile;
911
import ch.cyberduck.core.Protocol;
1012
import ch.cyberduck.core.ProtocolFactory;
@@ -83,7 +85,7 @@ public UvfAccessTokenPayload getVaultAccessTokenJWE(final UUID vaultId, final Us
8385
}
8486

8587
@Override
86-
public Host getStorageBackend(final ProtocolFactory protocols, final ConfigDto configDto, final UUID vaultId, final VaultMetadataJWEBackendDto vaultMetadata) throws ApiException, AccessException {
88+
public Host getStorageBackend(final ProtocolFactory protocols, final ConfigDto configDto, final UUID vaultId, final VaultMetadataJWEBackendDto vaultMetadata, final OAuthTokens tokens) throws ApiException, AccessException {
8789
if(null == protocols.forName(vaultMetadata.getProvider())) {
8890
log.debug("Load missing profile {}", vaultMetadata.getProvider());
8991
final StorageProfileDtoWrapper storageProfile = StorageProfileDtoWrapper.coerce(storageProfileResourceApi
@@ -108,11 +110,13 @@ public Host getStorageBackend(final ProtocolFactory protocols, final ConfigDto c
108110
log.debug("Configure bookmark for vault {}", vaultMetadata);
109111
bookmark.setNickname(vaultMetadata.getNickname());
110112
bookmark.setDefaultPath(vaultMetadata.getDefaultPath());
113+
final Credentials credentials = bookmark.getCredentials();
114+
credentials.setOauth(tokens);
111115
if(vaultMetadata.getUsername() != null) {
112-
bookmark.getCredentials().setUsername(vaultMetadata.getUsername());
116+
credentials.setUsername(vaultMetadata.getUsername());
113117
}
114118
if(vaultMetadata.getPassword() != null) {
115-
bookmark.getCredentials().setPassword(vaultMetadata.getPassword());
119+
credentials.setPassword(vaultMetadata.getPassword());
116120
}
117121
if(protocol.getProperties().get(S3_ASSUMEROLE_ROLEARN) != null) {
118122
bookmark.setProperty(OAUTH_TOKENEXCHANGE_ADDITIONAL_SCOPES, vaultId.toString());

hub/src/test/java/cloud/katta/core/AbstractHubSynchronizeTest.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import ch.cyberduck.core.DisabledConnectionCallback;
1010
import ch.cyberduck.core.DisabledListProgressListener;
1111
import ch.cyberduck.core.ListService;
12+
import ch.cyberduck.core.OAuthTokens;
1213
import ch.cyberduck.core.Path;
1314
import ch.cyberduck.core.Session;
1415
import ch.cyberduck.core.SimplePathPredicate;
@@ -30,12 +31,18 @@
3031
import ch.cyberduck.core.transfer.TransferItem;
3132
import ch.cyberduck.core.transfer.TransferStatus;
3233

34+
import cloud.katta.client.api.UsersResourceApi;
35+
3336
import org.apache.commons.io.IOUtils;
3437
import org.apache.commons.lang3.RandomUtils;
38+
import org.apache.commons.lang3.StringUtils;
3539
import org.apache.logging.log4j.LogManager;
3640
import org.apache.logging.log4j.Logger;
3741
import org.jetbrains.annotations.NotNull;
42+
import org.junit.jupiter.api.MethodOrderer;
43+
import org.junit.jupiter.api.TestMethodOrder;
3844
import org.junit.jupiter.params.ParameterizedTest;
45+
import org.junit.jupiter.params.provider.MethodSource;
3946
import org.openapitools.jackson.nullable.JsonNullableModule;
4047

4148
import java.io.ByteArrayInputStream;
@@ -71,6 +78,7 @@
7178
import static cloud.katta.testsetup.HubTestUtilities.getAdminApiClient;
7279
import static org.junit.jupiter.api.Assertions.*;
7380

81+
@TestMethodOrder(MethodOrderer.MethodName.class)
7482
public abstract class AbstractHubSynchronizeTest extends AbstractHubTest {
7583
private static final Logger log = LogManager.getLogger(AbstractHubSynchronizeTest.class.getName());
7684

@@ -310,6 +318,22 @@ public void test03AddVault(final HubTestConfig config) throws Exception {
310318
}
311319
}
312320

321+
@ParameterizedTest
322+
@MethodSource("arguments")
323+
public void test04SetupCode(final HubTestConfig config) throws Exception {
324+
final HubSession hubSession = setupConnection(config.setup);
325+
assertEquals(OAuthTokens.EMPTY, hubSession.getHost().getCredentials().getOauth());
326+
assertEquals(StringUtils.EMPTY, hubSession.getHost().getCredentials().getPassword());
327+
final ListService feature = hubSession.getFeature(ListService.class);
328+
final AttributedList<Path> vaults = feature.list(Home.ROOT, new DisabledListProgressListener());
329+
assertEquals(2, vaults.size());
330+
assertEquals(vaults, feature.list(Home.ROOT, new DisabledListProgressListener()));
331+
for(Path vault : vaults) {
332+
assertTrue(hubSession.getFeature(Find.class).find(vault));
333+
}
334+
new UsersResourceApi(hubSession.getClient()).apiUsersMeGet(true);
335+
}
336+
313337
private static byte @NotNull [] writeRandomFile(final Session<?> session, final Path file, int size) throws BackgroundException, IOException {
314338
final byte[] content = RandomUtils.nextBytes(size);
315339
final TransferStatus transferStatus = new TransferStatus().withLength(content.length);

hub/src/test/java/cloud/katta/testsetup/AbstractHubTest.java

Lines changed: 22 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@
1414
import ch.cyberduck.core.vault.VaultRegistryFactory;
1515
import ch.cyberduck.test.VaultTest;
1616

17+
import org.jetbrains.annotations.NotNull;
1718
import org.junit.jupiter.api.BeforeAll;
19+
import org.junit.jupiter.api.BeforeEach;
1820
import org.junit.jupiter.api.Named;
1921
import org.junit.jupiter.params.provider.Arguments;
2022

@@ -115,8 +117,8 @@ public abstract class AbstractHubTest extends VaultTest {
115117
.withDockerConfig(HYBRID_DOCKER_CONFIG);
116118
}
117119

118-
@BeforeAll
119-
public static void preferences() throws IOException {
120+
@BeforeEach
121+
public void preferences() throws IOException {
120122
final Preferences preferences;
121123
PreferencesFactory.set(preferences = new MemoryPreferences() {
122124
@Override
@@ -161,6 +163,23 @@ protected static HubSession setupConnection(final HubTestConfig.Setup setup) thr
161163
assertTrue(factory.forName("s3").isEnabled());
162164
assertTrue(factory.forType(Protocol.Type.s3).isEnabled());
163165

166+
final DeviceSetupCallback proxy = deviceSetupCallback(setup);
167+
MockableDeviceSetupCallback.setProxy(proxy);
168+
169+
final Host hub = new HostParser(factory).get(setup.hubURL).withCredentials(new Credentials(setup.userConfig.username, setup.userConfig.password));
170+
final HubSession session = (HubSession) SessionFactory.create(hub, new DefaultX509TrustManager(), new DefaultX509KeyManager())
171+
.withRegistry(VaultRegistryFactory.get(new DisabledPasswordCallback()));
172+
final LoginConnectionService login = new LoginConnectionService(new DisabledLoginCallback(), new DisabledHostKeyCallback(),
173+
PasswordStoreFactory.get(), new DisabledProgressListener());
174+
login.check(session, new DisabledCancelCallback());
175+
176+
final BookmarkCollection bookmarks = BookmarkCollection.defaultCollection();
177+
bookmarks.add(hub);
178+
179+
return session;
180+
}
181+
182+
protected static @NotNull DeviceSetupCallback deviceSetupCallback(HubTestConfig.Setup setup) {
164183
final DeviceSetupCallback proxy = new DeviceSetupCallback() {
165184
@Override
166185
public String displayAccountKeyAndAskDeviceName(final Host bookmark, final AccountKeyAndDeviceName accountKeyAndDeviceName) {
@@ -178,19 +197,7 @@ public String generateAccountKey() {
178197
return staticSetupCode();
179198
}
180199
};
181-
MockableDeviceSetupCallback.setProxy(proxy);
182-
183-
final Host hub = new HostParser(factory).get(setup.hubURL).withCredentials(new Credentials(setup.userConfig.username, setup.userConfig.password));
184-
final HubSession session = (HubSession) SessionFactory.create(hub, new DefaultX509TrustManager(), new DefaultX509KeyManager())
185-
.withRegistry(VaultRegistryFactory.get(new DisabledPasswordCallback()));
186-
final LoginConnectionService login = new LoginConnectionService(new DisabledLoginCallback(), new DisabledHostKeyCallback(),
187-
PasswordStoreFactory.get(), new DisabledProgressListener());
188-
login.check(session, new DisabledCancelCallback());
189-
190-
final BookmarkCollection bookmarks = BookmarkCollection.defaultCollection();
191-
bookmarks.add(hub);
192-
193-
return session;
200+
return proxy;
194201
}
195202
}
196203

0 commit comments

Comments
 (0)