/*
* Copyright 2015 Red Hat, Inc. and/or its affiliates.
*
* Licensed 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.uberfire.backend.server.io;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import org.uberfire.commons.async.SimpleAsyncExecutorService;
import org.uberfire.commons.cluster.ClusterService;
import org.uberfire.commons.lifecycle.PriorityDisposable;
import org.uberfire.commons.lifecycle.PriorityDisposableRegistry;
import org.uberfire.java.nio.file.api.FileSystemProviders;
import org.uberfire.java.nio.file.spi.FileSystemProvider;
import org.uberfire.java.nio.fs.jgit.JGitFileSystemProvider;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
import static org.powermock.api.mockito.PowerMockito.mockStatic;
@RunWith(PowerMockRunner.class)
@PrepareForTest({PriorityDisposableRegistry.class,
SimpleAsyncExecutorService.class,
FileSystemProviders.class})
public class DisposableShutdownServiceTest {
@Test
public void testGeneralStatic() {
mockStatic(PriorityDisposableRegistry.class);
mockStatic(SimpleAsyncExecutorService.class);
mockStatic(FileSystemProviders.class);
final JGitFileSystemProvider disposableProvider = mock(JGitFileSystemProvider.class);
when(FileSystemProviders.installedProviders()).thenReturn(Arrays.asList(mock(FileSystemProvider.class),
disposableProvider));
new DisposableShutdownService().contextDestroyed(null);
verify(disposableProvider,
times(1)).dispose();
PowerMockito.verifyStatic();
SimpleAsyncExecutorService.shutdownInstances();
PowerMockito.verifyStatic();
PriorityDisposableRegistry.clear();
}
@Test
public void testCluster() {
mockStatic(PriorityDisposableRegistry.class);
mockStatic(SimpleAsyncExecutorService.class);
mockStatic(FileSystemProviders.class);
final ClusterService clusterService = mock(ClusterService.class);
when(FileSystemProviders.installedProviders()).thenReturn(Collections.<FileSystemProvider>emptyList());
when(PriorityDisposableRegistry.getDisposables()).thenReturn(Arrays.asList(mock(PriorityDisposable.class),
clusterService));
new DisposableShutdownService().contextDestroyed(null);
verify(clusterService,
times(1)).lock();
verify(clusterService,
times(1)).unlock();
verify(clusterService,
times(1)).dispose();
}
@Test
public void testDisposables() {
mockStatic(PriorityDisposableRegistry.class);
mockStatic(SimpleAsyncExecutorService.class);
mockStatic(FileSystemProviders.class);
final PriorityDisposable priorityDisposable1 = mock(PriorityDisposable.class);
final PriorityDisposable priorityDisposable2 = mock(PriorityDisposable.class);
final PriorityDisposable priorityDisposable3 = mock(PriorityDisposable.class);
when(FileSystemProviders.installedProviders()).thenReturn(Collections.<FileSystemProvider>emptyList());
when(PriorityDisposableRegistry.getDisposables()).thenReturn(Arrays.asList(priorityDisposable1,
priorityDisposable2,
priorityDisposable3));
new DisposableShutdownService().contextDestroyed(null);
verify(priorityDisposable1,
times(1)).dispose();
verify(priorityDisposable2,
times(1)).dispose();
verify(priorityDisposable3,
times(1)).dispose();
}
@Test
public void testSort() {
final PriorityDisposable priorityDisposable1 = mock(PriorityDisposable.class);
Mockito.when(priorityDisposable1.priority()).thenReturn(-1);
final PriorityDisposable priorityDisposable2 = mock(PriorityDisposable.class);
Mockito.when(priorityDisposable2.priority()).thenReturn(0);
final PriorityDisposable priorityDisposable3 = mock(PriorityDisposable.class);
Mockito.when(priorityDisposable3.priority()).thenReturn(10);
final PriorityDisposable priorityDisposable4 = mock(PriorityDisposable.class);
Mockito.when(priorityDisposable4.priority()).thenReturn(11);
final ArrayList<PriorityDisposable> disposables = new ArrayList<PriorityDisposable>();
disposables.add(priorityDisposable3);
disposables.add(priorityDisposable2);
disposables.add(priorityDisposable4);
disposables.add(priorityDisposable1);
assertEquals(priorityDisposable3,
disposables.get(0));
assertEquals(priorityDisposable2,
disposables.get(1));
assertEquals(priorityDisposable4,
disposables.get(2));
assertEquals(priorityDisposable1,
disposables.get(3));
new DisposableShutdownService().sort(disposables);
assertEquals(4,
disposables.size());
assertEquals(priorityDisposable4,
disposables.get(0));
assertEquals(priorityDisposable3,
disposables.get(1));
assertEquals(priorityDisposable2,
disposables.get(2));
assertEquals(priorityDisposable1,
disposables.get(3));
}
}