blob: fdb71bf2d45ae2a4125659e7c103f76708b84009 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache license, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the license for the specific language governing permissions and
* limitations under the license.
*/
package org.apache.logging.log4j.layout.template.json.util;
import org.apache.logging.log4j.plugins.convert.TypeConverter;
import org.apache.logging.log4j.plugins.convert.TypeConverterRegistry;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;
import java.util.ArrayDeque;
import java.util.concurrent.ArrayBlockingQueue;
class RecyclerFactoriesTest {
@Test
void test_RecyclerFactoryConverter() throws Exception {
// Check if the type converter is registered.
final TypeConverter<?> converter = TypeConverterRegistry
.getInstance()
.findCompatibleConverter(RecyclerFactory.class);
Assertions.assertThat(converter).isNotNull();
// Check dummy recycler factory.
{
final Object actualDummyRecyclerFactory = converter.convert("dummy");
Assertions
.assertThat(actualDummyRecyclerFactory)
.isSameAs(DummyRecyclerFactory.getInstance());
}
// Check thread-local recycler factory.
{
final Object actualThreadLocalRecyclerFactory = converter.convert("threadLocal");
Assertions
.assertThat(actualThreadLocalRecyclerFactory)
.isSameAs(ThreadLocalRecyclerFactory.getInstance());
}
// Check queueing recycler factory.
{
final Object actualQueueingRecyclerFactory = converter.convert("queue");
Assertions
.assertThat(actualQueueingRecyclerFactory)
.isInstanceOf(QueueingRecyclerFactory.class);
}
// Check queueing recycler factory with supplier.
{
final Object recyclerFactory = converter.convert(
"queue:supplier=java.util.ArrayDeque.new");
Assertions
.assertThat(recyclerFactory)
.isInstanceOf(QueueingRecyclerFactory.class);
final QueueingRecyclerFactory queueingRecyclerFactory =
(QueueingRecyclerFactory) recyclerFactory;
final Recycler<Object> recycler =
queueingRecyclerFactory.create(Object::new);
Assertions
.assertThat(recycler)
.isInstanceOf(QueueingRecycler.class);
final QueueingRecycler<Object> queueingRecycler =
(QueueingRecycler<Object>) recycler;
Assertions
.assertThat(queueingRecycler.getQueue())
.isInstanceOf(ArrayDeque.class);
}
// Check queueing recycler factory with capacity.
{
final Object actualQueueingRecyclerFactory = converter.convert(
"queue:capacity=100");
Assertions
.assertThat(actualQueueingRecyclerFactory)
.isInstanceOf(QueueingRecyclerFactory.class);
}
// Check queueing recycler factory with supplier and capacity.
{
final Object recyclerFactory = converter.convert(
"queue:" +
"supplier=java.util.concurrent.ArrayBlockingQueue.new," +
"capacity=100");
Assertions
.assertThat(recyclerFactory)
.isInstanceOf(QueueingRecyclerFactory.class);
final QueueingRecyclerFactory queueingRecyclerFactory =
(QueueingRecyclerFactory) recyclerFactory;
final Recycler<Object> recycler =
queueingRecyclerFactory.create(Object::new);
Assertions
.assertThat(recycler)
.isInstanceOf(QueueingRecycler.class);
final QueueingRecycler<Object> queueingRecycler =
(QueueingRecycler<Object>) recycler;
Assertions
.assertThat(queueingRecycler.getQueue())
.isInstanceOf(ArrayBlockingQueue.class);
final ArrayBlockingQueue<Object> queue =
(ArrayBlockingQueue<Object>) queueingRecycler.getQueue();
Assertions.assertThat(queue.remainingCapacity()).isEqualTo(100);
}
}
}