From bf7837eb9d28d5bf565bd438646c2a6449518188 Mon Sep 17 00:00:00 2001 From: Benjamin Marwell Date: Thu, 25 Jun 2020 09:48:01 +0200 Subject: [PATCH] =?UTF-8?q?[SHIRO-778]=C2=A0test=20case=20for=20onInit()?= =?UTF-8?q?=20called=20twice?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config/ogdl/ReflectionBuilderTest.groovy | 18 +++++++ .../config/ogdl/beans/InitCountBean.java | 49 +++++++++++++++++++ 2 files changed, 67 insertions(+) create mode 100644 config/ogdl/src/test/java/org/apache/shiro/config/ogdl/beans/InitCountBean.java diff --git a/config/ogdl/src/test/groovy/org/apache/shiro/config/ogdl/ReflectionBuilderTest.groovy b/config/ogdl/src/test/groovy/org/apache/shiro/config/ogdl/ReflectionBuilderTest.groovy index 5fd0950df..381c3af1f 100644 --- a/config/ogdl/src/test/groovy/org/apache/shiro/config/ogdl/ReflectionBuilderTest.groovy +++ b/config/ogdl/src/test/groovy/org/apache/shiro/config/ogdl/ReflectionBuilderTest.groovy @@ -18,6 +18,7 @@ */ package org.apache.shiro.config.ogdl +import org.apache.shiro.config.ogdl.beans.InitCountBean import org.apache.shiro.lang.codec.Base64 import org.apache.shiro.lang.codec.CodecSupport import org.apache.shiro.lang.codec.Hex @@ -26,6 +27,8 @@ import org.apache.shiro.config.Ini import org.apache.shiro.config.ogdl.event.BeanEvent import org.junit.Test +import java.util.concurrent.ConcurrentHashMap + import static org.junit.Assert.* import static org.hamcrest.Matchers.* @@ -640,6 +643,21 @@ class ReflectionBuilderTest { assertNotNull(beanMap.get("two")) } + @Test + void testNotMultipleInitialization() { + // given + Map defs = new ConcurrentHashMap<>() + defs.put("initcountbean", InitCountBean.getCanonicalName()) + ReflectionBuilder builder = new ReflectionBuilder() + + // when + builder.buildObjects(defs); + builder.buildObjects(null); + + // then + assertEquals(1, InitCountBean.getInitCount()) + } + void assertInstantiatedEvents(String name, Map objects, int expected) { def bean = objects.get(name) as RecordingBeanListener def events = bean.getInstantiatedEvents() diff --git a/config/ogdl/src/test/java/org/apache/shiro/config/ogdl/beans/InitCountBean.java b/config/ogdl/src/test/java/org/apache/shiro/config/ogdl/beans/InitCountBean.java new file mode 100644 index 000000000..4742d3399 --- /dev/null +++ b/config/ogdl/src/test/java/org/apache/shiro/config/ogdl/beans/InitCountBean.java @@ -0,0 +1,49 @@ +/* + * 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.shiro.config.ogdl.beans; + +import org.apache.shiro.lang.ShiroException; +import org.apache.shiro.lang.util.Initializable; + +import java.util.StringJoiner; +import java.util.concurrent.atomic.LongAdder; + +public class InitCountBean implements Initializable { + private static final LongAdder INIT_COUNT = new LongAdder(); + + public InitCountBean() { + super(); + } + + public static long getInitCount() { + return INIT_COUNT.longValue(); + } + + @Override + public String toString() { + return new StringJoiner(", ", InitCountBean.class.getSimpleName() + "[", "]") + .add("INIT_COUNT=" + getInitCount()) + .toString(); + } + + @Override + public void init() throws ShiroException { + INIT_COUNT.increment(); + } +}