com.gemstone.gemfire.internal.LocalStatisticsImplJUnitTest.java Source code

Java tutorial

Introduction

Here is the source code for com.gemstone.gemfire.internal.LocalStatisticsImplJUnitTest.java

Source

/*
 * 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 com.gemstone.gemfire.internal;

import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.*;

import java.util.function.DoubleSupplier;
import java.util.function.IntSupplier;
import java.util.function.LongSupplier;

import com.gemstone.gemfire.StatisticsType;
import com.gemstone.gemfire.internal.LocalStatisticsImpl;
import com.gemstone.gemfire.internal.StatisticsImpl;
import com.gemstone.gemfire.internal.StatisticsManager;
import com.gemstone.gemfire.internal.StatisticsTypeImpl;
import com.gemstone.gemfire.test.junit.categories.UnitTest;

import org.apache.commons.lang.ObjectUtils.Null;
import org.apache.logging.log4j.Logger;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.junit.rules.ExpectedException;

@Category(UnitTest.class)
public class LocalStatisticsImplJUnitTest {
    @Rule
    public ExpectedException thrown = ExpectedException.none();

    private StatisticsImpl stats;

    @Before
    public void createStats() {
        final StatisticsTypeImpl type = mock(StatisticsTypeImpl.class);
        when(type.getIntStatCount()).thenReturn(5);
        when(type.getDoubleStatCount()).thenReturn(5);
        when(type.getLongStatCount()).thenReturn(5);
        final String textId = "";
        final long numbericId = 0;
        final long uniqueId = 0;
        final int osStatFlags = 0;
        final boolean atomicIncrements = false;
        final StatisticsManager system = mock(StatisticsManager.class);
        stats = new LocalStatisticsImpl(type, textId, numbericId, uniqueId, atomicIncrements, osStatFlags, system);
    }

    @Test
    public void invokeIntSuppliersShouldUpdateStats() {
        IntSupplier supplier1 = mock(IntSupplier.class);
        when(supplier1.getAsInt()).thenReturn(23);
        stats.setIntSupplier(4, supplier1);
        assertEquals(0, stats.invokeSuppliers());

        verify(supplier1).getAsInt();
        assertEquals(23, stats.getInt(4));
    }

    @Test
    public void invokeLongSuppliersShouldUpdateStats() {
        LongSupplier supplier1 = mock(LongSupplier.class);
        when(supplier1.getAsLong()).thenReturn(23L);
        stats.setLongSupplier(4, supplier1);
        assertEquals(0, stats.invokeSuppliers());

        verify(supplier1).getAsLong();
        assertEquals(23L, stats.getLong(4));
    }

    @Test
    public void invokeDoubleSuppliersShouldUpdateStats() {
        DoubleSupplier supplier1 = mock(DoubleSupplier.class);
        when(supplier1.getAsDouble()).thenReturn(23.3);
        stats.setDoubleSupplier(4, supplier1);
        assertEquals(0, stats.invokeSuppliers());

        verify(supplier1).getAsDouble();
        assertEquals(23.3, stats.getDouble(4), 0.1f);
    }

    @Test
    public void getSupplierCountShouldReturnCorrectCount() {
        IntSupplier supplier1 = mock(IntSupplier.class);
        stats.setIntSupplier(4, supplier1);
        assertEquals(1, stats.getSupplierCount());
    }

    @Test
    public void invokeSuppliersShouldCatchSupplierErrorsAndReturnCount() {
        IntSupplier supplier1 = mock(IntSupplier.class);
        when(supplier1.getAsInt()).thenThrow(NullPointerException.class);
        stats.setIntSupplier(4, supplier1);
        assertEquals(1, stats.invokeSuppliers());

        verify(supplier1).getAsInt();
    }

    @Test
    public void invokeSuppliersShouldLogErrorOnlyOnce() {
        final Logger originalLogger = StatisticsImpl.logger;
        try {
            final Logger logger = mock(Logger.class);
            StatisticsImpl.logger = logger;
            IntSupplier supplier1 = mock(IntSupplier.class);
            when(supplier1.getAsInt()).thenThrow(NullPointerException.class);
            stats.setIntSupplier(4, supplier1);
            assertEquals(1, stats.invokeSuppliers());
            verify(logger, times(1)).warn(anyString(), anyString(), anyInt(), isA(NullPointerException.class));
            assertEquals(1, stats.invokeSuppliers());
            //Make sure the logger isn't invoked again
            verify(logger, times(1)).warn(anyString(), anyString(), anyInt(), isA(NullPointerException.class));
        } finally {
            StatisticsImpl.logger = originalLogger;
        }
    }

    @Test
    public void badSupplierParamShouldThrowError() {
        IntSupplier supplier1 = mock(IntSupplier.class);
        when(supplier1.getAsInt()).thenReturn(23);
        thrown.expect(IllegalArgumentException.class);
        stats.setIntSupplier(23, supplier1);
    }
}