Search in sources :

Example 1 with Slice

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();
        }
    })));
}
Also used : RequestLine(com.artipie.http.rq.RequestLine) IsNot(org.hamcrest.core.IsNot) RsHasStatus(com.artipie.http.hm.RsHasStatus) Slice(com.artipie.http.Slice) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest) MethodSource(org.junit.jupiter.params.provider.MethodSource)

Example 2 with Slice

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());
}
Also used : RqMethod(com.artipie.http.rq.RqMethod) RepoConfig(com.artipie.repo.RepoConfig) Headers(com.artipie.http.Headers) IsNot(org.hamcrest.core.IsNot) Slice(com.artipie.http.Slice) Permissions(com.artipie.http.auth.Permissions) CustomMatcher(org.hamcrest.CustomMatcher) RsStatus(com.artipie.http.rs.RsStatus) IOException(java.io.IOException) CompletableFuture(java.util.concurrent.CompletableFuture) Key(com.artipie.asto.Key) Yaml(com.amihaiemil.eoyaml.Yaml) RsHasStatus(com.artipie.http.hm.RsHasStatus) RequestLine(com.artipie.http.rq.RequestLine) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest) Stream(java.util.stream.Stream) MatcherAssert(org.hamcrest.MatcherAssert) Flowable(io.reactivex.Flowable) ClientSlices(com.artipie.http.client.ClientSlices) JettyClientSlices(com.artipie.http.client.jetty.JettyClientSlices) Assertions(org.junit.jupiter.api.Assertions) Optional(java.util.Optional) MethodSource(org.junit.jupiter.params.provider.MethodSource) RequestLine(com.artipie.http.rq.RequestLine) Slice(com.artipie.http.Slice) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest) MethodSource(org.junit.jupiter.params.provider.MethodSource)

Example 3 with Slice

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));
}
Also used : Response(com.artipie.http.Response) RsWithStatus(com.artipie.http.rs.RsWithStatus) RsHasStatus(com.artipie.http.hm.RsHasStatus) Slice(com.artipie.http.Slice) Test(org.junit.jupiter.api.Test) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest)

Example 4 with Slice

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();
}
Also used : RepoConfig(com.artipie.repo.RepoConfig) Slice(com.artipie.http.Slice) Options(org.apache.commons.cli.Options) ArtipieRepositories(com.artipie.http.ArtipieRepositories) NopMetrics(com.artipie.metrics.nop.NopMetrics) ArrayList(java.util.ArrayList) DefaultParser(org.apache.commons.cli.DefaultParser) BaseSlice(com.artipie.http.BaseSlice) Metrics(com.artipie.metrics.Metrics) Vertx(io.vertx.reactivex.core.Vertx) Storage(com.artipie.asto.Storage) ConfigFile(com.artipie.repo.ConfigFile) VertxSliceServer(com.artipie.vertx.VertxSliceServer) CommandLine(org.apache.commons.cli.CommandLine) MetricsFromConfig(com.artipie.metrics.MetricsFromConfig) Path(java.nio.file.Path) CommandLineParser(org.apache.commons.cli.CommandLineParser) Predicate(java.util.function.Predicate) Collection(java.util.Collection) IOException(java.io.IOException) Key(com.artipie.asto.Key) Collectors(java.util.stream.Collectors) List(java.util.List) ClientSlices(com.artipie.http.client.ClientSlices) JettyClientSlices(com.artipie.http.client.jetty.JettyClientSlices) MainSlice(com.artipie.http.MainSlice) Optional(java.util.Optional) Logger(com.jcabi.log.Logger) ArtipieProperties(com.artipie.misc.ArtipieProperties) Storage(com.artipie.asto.Storage) RepoConfig(com.artipie.repo.RepoConfig) ConfigFile(com.artipie.repo.ConfigFile) ArtipieRepositories(com.artipie.http.ArtipieRepositories)

Example 5 with Slice

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;
}
Also used : SubStorage(com.artipie.asto.SubStorage) RepoConfig(com.artipie.repo.RepoConfig) BasicAuthScheme(com.artipie.http.auth.BasicAuthScheme) AstoDocker(com.artipie.docker.asto.AstoDocker) Slice(com.artipie.http.Slice) Permissions(com.artipie.http.auth.Permissions) Publisher(org.reactivestreams.Publisher) Response(com.artipie.http.Response) MultiReadDocker(com.artipie.docker.composite.MultiReadDocker) DockerSlice(com.artipie.docker.http.DockerSlice) Collectors(java.util.stream.Collectors) ByteBuffer(java.nio.ByteBuffer) AuthClientSlice(com.artipie.http.client.auth.AuthClientSlice) TrimmedDocker(com.artipie.docker.http.TrimmedDocker) RegistryRoot(com.artipie.docker.asto.RegistryRoot) CacheDocker(com.artipie.docker.cache.CacheDocker) ReadWriteDocker(com.artipie.docker.composite.ReadWriteDocker) ClientSlices(com.artipie.http.client.ClientSlices) ProxyDocker(com.artipie.docker.proxy.ProxyDocker) ProxyConfig(com.artipie.repo.ProxyConfig) Map(java.util.Map) Authentication(com.artipie.http.auth.Authentication) DockerRoutingSlice(com.artipie.http.DockerRoutingSlice) TrimmedDocker(com.artipie.docker.http.TrimmedDocker) MultiReadDocker(com.artipie.docker.composite.MultiReadDocker) SubStorage(com.artipie.asto.SubStorage) ReadWriteDocker(com.artipie.docker.composite.ReadWriteDocker) AstoDocker(com.artipie.docker.asto.AstoDocker) MultiReadDocker(com.artipie.docker.composite.MultiReadDocker) TrimmedDocker(com.artipie.docker.http.TrimmedDocker) CacheDocker(com.artipie.docker.cache.CacheDocker) ReadWriteDocker(com.artipie.docker.composite.ReadWriteDocker) ProxyDocker(com.artipie.docker.proxy.ProxyDocker) Slice(com.artipie.http.Slice) DockerSlice(com.artipie.docker.http.DockerSlice) AuthClientSlice(com.artipie.http.client.auth.AuthClientSlice) DockerRoutingSlice(com.artipie.http.DockerRoutingSlice) DockerSlice(com.artipie.docker.http.DockerSlice) BasicAuthScheme(com.artipie.http.auth.BasicAuthScheme) AstoDocker(com.artipie.docker.asto.AstoDocker) DockerRoutingSlice(com.artipie.http.DockerRoutingSlice)

Aggregations

Slice (com.artipie.http.Slice)8 RsHasStatus (com.artipie.http.hm.RsHasStatus)5 ParameterizedTest (org.junit.jupiter.params.ParameterizedTest)5 Response (com.artipie.http.Response)4 ClientSlices (com.artipie.http.client.ClientSlices)4 Permissions (com.artipie.http.auth.Permissions)3 RsWithStatus (com.artipie.http.rs.RsWithStatus)3 RepoConfig (com.artipie.repo.RepoConfig)3 Key (com.artipie.asto.Key)2 SubStorage (com.artipie.asto.SubStorage)2 AstoDocker (com.artipie.docker.asto.AstoDocker)2 RegistryRoot (com.artipie.docker.asto.RegistryRoot)2 DockerSlice (com.artipie.docker.http.DockerSlice)2 TrimmedDocker (com.artipie.docker.http.TrimmedDocker)2 DockerRoutingSlice (com.artipie.http.DockerRoutingSlice)2 Authentication (com.artipie.http.auth.Authentication)2 BasicAuthScheme (com.artipie.http.auth.BasicAuthScheme)2 JettyClientSlices (com.artipie.http.client.jetty.JettyClientSlices)2 RequestLine (com.artipie.http.rq.RequestLine)2 IOException (java.io.IOException)2