use of com.artipie.http.Slice in project artipie by artipie.
the class DockerProxyTest method shouldBuildFromConfig.
@ParameterizedTest
@MethodSource("goodConfigs")
void shouldBuildFromConfig(final String yaml) throws Exception {
final Slice slice = dockerProxy(yaml);
MatcherAssert.assertThat(slice.response(new RequestLine(RqMethod.GET, "/").toString(), Headers.EMPTY, Flowable.empty()), new RsHasStatus(new IsNot<>(new CustomMatcher<>("is server error") {
@Override
public boolean matches(final Object item) {
return ((RsStatus) item).serverError();
}
})));
}
use of com.artipie.http.Slice in project artipie by artipie.
the class DockerProxyTest method shouldFailBuildFromBadConfig.
@ParameterizedTest
@MethodSource("badConfigs")
void shouldFailBuildFromBadConfig(final String yaml) throws Exception {
final Slice slice = dockerProxy(yaml);
Assertions.assertThrows(RuntimeException.class, () -> slice.response(new RequestLine(RqMethod.GET, "/").toString(), Headers.EMPTY, Flowable.empty()).send((status, headers, body) -> CompletableFuture.allOf()).toCompletableFuture().join());
}
use of com.artipie.http.Slice in project artipie by artipie.
the class ContentLengthRestrictionTest method shouldNotPassRequestsAboveLimit.
@Test
public void shouldNotPassRequestsAboveLimit() {
final int limit = 10;
final Slice slice = new ContentLengthRestriction((line, headers, body) -> new RsWithStatus(RsStatus.OK), limit);
final Response response = slice.response("", this.headers("11"), Flowable.empty());
MatcherAssert.assertThat(response, new RsHasStatus(RsStatus.PAYLOAD_TOO_LARGE));
}
use of com.artipie.http.Slice in project artipie by artipie.
the class VertxMain method startRepos.
/**
* Start repository servers.
*
* @param settings Settings.
* @param metrics Metrics.
*/
private void startRepos(final Settings settings, final Metrics metrics) {
final Storage storage = settings.repoConfigsStorage();
final Collection<RepoConfig> configs = storage.list(Key.ROOT).thenApply(keys -> keys.stream().map(key -> new ConfigFile(key)).filter(Predicate.not(ConfigFile::isSystem).and(ConfigFile::isYamlOrYml)).map(ConfigFile::name).map(name -> new RepositoriesFromStorage(this.http, storage).config(name)).map(stage -> stage.toCompletableFuture().join()).collect(Collectors.toList())).toCompletableFuture().join();
for (final RepoConfig repo : configs) {
try {
repo.port().ifPresent(prt -> {
final String name = new ConfigFile(repo.name()).name();
this.listenOn(new ArtipieRepositories(this.http, settings).slice(new Key.From(name), true), metrics, prt);
Logger.info(VertxMain.class, "Artipie repo '%s' was started on port %d", name, prt);
});
} catch (final IllegalStateException err) {
Logger.error(this, "Invalid repo config file %s: %[exception]s", repo.name(), err);
}
}
new QuartzScheduler(configs).start();
}
use of com.artipie.http.Slice in project artipie by artipie.
the class DockerProxy method delegate.
/**
* Creates Docker proxy repository slice from configuration.
*
* @return Docker proxy slice.
*/
private Slice delegate() {
final Docker proxies = new MultiReadDocker(this.cfg.proxy().remotes().stream().map(remote -> proxy(this.client, remote)).collect(Collectors.toList()));
Docker docker = this.cfg.storageOpt().<Docker>map(storage -> {
final AstoDocker local = new AstoDocker(new SubStorage(RegistryRoot.V2, storage));
return new ReadWriteDocker(new MultiReadDocker(local, proxies), local);
}).orElse(proxies);
if (!this.standalone) {
docker = new TrimmedDocker(docker, this.cfg.name());
}
Slice slice = new DockerSlice(docker, new DockerPermissions(this.perms), new BasicAuthScheme(this.auth));
if (!this.standalone) {
slice = new DockerRoutingSlice.Reverted(slice);
}
return slice;
}
Aggregations