mirror of https://github.com/apache/archiva.git
Adding test
This commit is contained in:
parent
4ab1e3733c
commit
59a21521d2
|
@ -28,6 +28,9 @@ import java.util.Set;
|
||||||
import java.util.Spliterator;
|
import java.util.Spliterator;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
import java.util.stream.IntStream;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
import java.util.stream.StreamSupport;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
@ -147,12 +150,20 @@ public class AssetSpliterator implements Spliterator<StorageAsset>, Closeable
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// In reverse order
|
||||||
List<StorageAsset> getChildContainers( StorageAsset parent) {
|
List<StorageAsset> getChildContainers( StorageAsset parent) {
|
||||||
return parent.list( ).stream( ).filter( StorageAsset::isContainer ).collect( Collectors.toList( ) );
|
final List<StorageAsset> children = parent.list( );
|
||||||
|
final int len = children.size( );
|
||||||
|
return IntStream.range( 0, children.size( ) ).mapToObj( i ->
|
||||||
|
children.get(len - i - 1)).filter( StorageAsset::isContainer ).collect( Collectors.toList( ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// In reverse order
|
||||||
List<StorageAsset> getChildFiles(StorageAsset parent) {
|
List<StorageAsset> getChildFiles(StorageAsset parent) {
|
||||||
return parent.list( ).stream( ).filter( StorageAsset::isLeaf ).collect( Collectors.toList( ) );
|
final List<StorageAsset> children = parent.list( );
|
||||||
|
final int len = children.size( );
|
||||||
|
return IntStream.range( 0, children.size( ) ).mapToObj( i ->
|
||||||
|
children.get(len - i - 1)).filter( StorageAsset::isLeaf ).collect( Collectors.toList( ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,100 @@
|
||||||
|
package org.apache.archiva.repository.storage;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import org.apache.archiva.repository.storage.mock.MockAsset;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.LinkedList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test the AssetSpliterator class
|
||||||
|
*
|
||||||
|
* @author Martin Stockhammer <martin_s@apache.org>
|
||||||
|
*/
|
||||||
|
class AssetSpliteratorTest
|
||||||
|
{
|
||||||
|
|
||||||
|
private StorageAsset createTree() {
|
||||||
|
MockAsset root = new MockAsset( "" );
|
||||||
|
for (int i=0; i<10; i++) {
|
||||||
|
String name1 = "a" + String.format("%03d",i);
|
||||||
|
MockAsset parent1 = new MockAsset( root, name1 );
|
||||||
|
for (int k=0; k<15; k++) {
|
||||||
|
String name2 = name1 + String.format("%03d", k);
|
||||||
|
MockAsset parent2 = new MockAsset( parent1, name2 );
|
||||||
|
for (int u=0; u<5; u++) {
|
||||||
|
String name3 = name2 + String.format("%03d", u);
|
||||||
|
MockAsset parent3 = new MockAsset( parent2, name3 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return root;
|
||||||
|
}
|
||||||
|
|
||||||
|
private class Status {
|
||||||
|
LinkedList<StorageAsset> visited = new LinkedList<>( );
|
||||||
|
|
||||||
|
Status() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void add(StorageAsset asset) {
|
||||||
|
visited.addLast( asset );
|
||||||
|
}
|
||||||
|
|
||||||
|
public StorageAsset getLast() {
|
||||||
|
return visited.getLast( );
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<StorageAsset> getVisited() {
|
||||||
|
return visited;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int size() {
|
||||||
|
return visited.size( );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void tryAdvance( )
|
||||||
|
{
|
||||||
|
StorageAsset root = createTree( );
|
||||||
|
AssetSpliterator spliterator = new AssetSpliterator( root );
|
||||||
|
final StorageAsset expectedTarget = root.list( ).get( 0 ).list( ).get( 0 ).list( ).get( 0 );
|
||||||
|
final Status status = new Status( );
|
||||||
|
spliterator.tryAdvance( a -> status.add( a ) );
|
||||||
|
assertEquals( expectedTarget, status.getLast( ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void forEachRemaining( )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void trySplit( )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,192 @@
|
||||||
|
package org.apache.archiva.repository.storage.mock;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import org.apache.archiva.repository.storage.RepositoryStorage;
|
||||||
|
import org.apache.archiva.repository.storage.StorageAsset;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.nio.channels.ReadableByteChannel;
|
||||||
|
import java.nio.channels.WritableByteChannel;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
import java.time.Instant;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class MockAsset implements StorageAsset
|
||||||
|
{
|
||||||
|
private StorageAsset parent;
|
||||||
|
private String path;
|
||||||
|
private String name;
|
||||||
|
private LinkedHashMap<String, StorageAsset> children = new LinkedHashMap<>( );
|
||||||
|
private boolean container = false;
|
||||||
|
|
||||||
|
public MockAsset( String name ) {
|
||||||
|
this.name = name;
|
||||||
|
this.path = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
public MockAsset( MockAsset parent, String name ) {
|
||||||
|
this.parent = parent;
|
||||||
|
this.path = parent.getPath( ) + "/" + name;
|
||||||
|
this.name = name;
|
||||||
|
parent.registerChild( this );
|
||||||
|
}
|
||||||
|
|
||||||
|
public void registerChild(StorageAsset child) {
|
||||||
|
children.putIfAbsent( child.getName(), child );
|
||||||
|
this.container = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public RepositoryStorage getStorage( )
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getPath( )
|
||||||
|
{
|
||||||
|
return this.path;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName( )
|
||||||
|
{
|
||||||
|
return this.name;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Instant getModificationTime( )
|
||||||
|
{
|
||||||
|
return Instant.now();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isContainer( )
|
||||||
|
{
|
||||||
|
return this.container;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isLeaf( )
|
||||||
|
{
|
||||||
|
return !this.container;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<StorageAsset> list( )
|
||||||
|
{
|
||||||
|
return new ArrayList( children.values( ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long getSize( )
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public InputStream getReadStream( ) throws IOException
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ReadableByteChannel getReadChannel( ) throws IOException
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public OutputStream getWriteStream( boolean replace ) throws IOException
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WritableByteChannel getWriteChannel( boolean replace ) throws IOException
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean replaceDataFromFile( Path newData ) throws IOException
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean exists( )
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void create( ) throws IOException
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Path getFilePath( ) throws UnsupportedOperationException
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isFileBased( )
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasParent( )
|
||||||
|
{
|
||||||
|
return this.parent != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public StorageAsset getParent( )
|
||||||
|
{
|
||||||
|
return this.parent;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public StorageAsset resolve( String toPath )
|
||||||
|
{
|
||||||
|
if (children.containsKey( toPath )) {
|
||||||
|
return children.get( toPath );
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString( )
|
||||||
|
{
|
||||||
|
return getPath();
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue