package io.eguan.iscsisrv;
/*
* #%L
* Project eguan
* %%
* Copyright (C) 2012 - 2017 Oodrive
* %%
* 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.
* #L%
*/
import io.eguan.iscsisrv.IscsiDevice;
import io.eguan.iscsisrv.IscsiTarget;
import java.io.IOException;
import java.nio.ByteBuffer;
import org.junit.Assert;
import org.junit.Test;
/**
* Unit tests for the creation of a iSCSI target.
*
* @author oodrive
* @author llambert
* @author ebredzinski
*/
public class IscsiTargetCreateTest {
/** Dummy IQN name */
private static final String DUMMY_NAME_IQN = "iqn.2000-06.com.oodrive:dummy target";
/** Dummy EUI name */
private static final String DUMMY_NAME_EUI = "eui.0123456789ABCDEF";
/** Dummy non null device */
static final IscsiDevice DUMMY_DEVICE = new IscsiDevice() {
@Override
public final long getSize() {
return 4096;
}
@Override
public final int getBlockSize() {
return 4096;
}
@Override
public final boolean isReadOnly() {
return false;
}
@Override
public final void write(final ByteBuffer bytes, final int length, final long storageIndex) throws IOException {
// No op
}
@Override
public final void read(final ByteBuffer bytes, final int length, final long storageIndex) throws IOException {
// No op
}
@Override
public final void close() throws IOException {
// No op
}
};
@Test(expected = NullPointerException.class)
public void testNullName() {
IscsiTarget.newIscsiTarget(null, "", DUMMY_DEVICE);
}
@Test(expected = NullPointerException.class)
public void testNullDevice() {
IscsiTarget.newIscsiTarget(DUMMY_NAME_IQN, "", null);
}
@Test(expected = IllegalArgumentException.class)
public void testNameIqnTooLong() {
final char[] name = new char[234 - 4];
for (int i = 0; i < name.length; i++) {
name[i] = 'a';
}
name[name.length - 1] = (byte) 0;
IscsiTarget.newIscsiTarget("iqn." + String.copyValueOf(name), null, DUMMY_DEVICE);
}
@Test(expected = IllegalArgumentException.class)
public void testNameIqnLengthLimitNonNullTerminated() {
final char[] name = new char[233 - 4];
for (int i = 0; i < name.length; i++) {
name[i] = 'a';
}
IscsiTarget.newIscsiTarget("iqn." + String.copyValueOf(name), null, DUMMY_DEVICE);
}
@Test
public void testNameIqnLengthLimit() {
final char[] name = new char[233 - 4];
for (int i = 0; i < name.length; i++) {
name[i] = 'a';
}
name[name.length - 1] = (byte) 0;
IscsiTarget.newIscsiTarget("iqn." + String.copyValueOf(name), null, DUMMY_DEVICE);
}
@Test(expected = IllegalArgumentException.class)
public void testNameEuiTooLong() {
final char[] name = new char[21];
for (int i = 0; i < name.length; i++) {
name[i] = 'a';
}
IscsiTarget.newIscsiTarget("eui." + String.copyValueOf(name), null, DUMMY_DEVICE);
}
@Test(expected = IllegalArgumentException.class)
public void testNameEuiTooShort() {
final char[] name = new char[19];
for (int i = 0; i < name.length; i++) {
name[i] = 'a';
}
IscsiTarget.newIscsiTarget("eui." + String.copyValueOf(name), null, DUMMY_DEVICE);
}
@Test(expected = IllegalArgumentException.class)
public void testNameEuiInvalid() {
IscsiTarget.newIscsiTarget("eui.0123456789zBCDEF", null, DUMMY_DEVICE);
}
@Test
public void testNameEuiValid() {
IscsiTarget.newIscsiTarget("eui.0123456789ABCDEF", null, DUMMY_DEVICE);
}
@Test(expected = IllegalArgumentException.class)
public void testNameInvalid() {
IscsiTarget.newIscsiTarget("invalid", null, DUMMY_DEVICE);
}
/**
* Suppose that the name is valid for lower case hexa digits.
*/
@Test
public void testNameEuiValidLowercase() {
IscsiTarget.newIscsiTarget("eui.0123456789abcdef", null, DUMMY_DEVICE);
}
@Test(expected = IllegalArgumentException.class)
public void testAliasTooLong() {
final char[] name = new char[256];
for (int i = 0; i < name.length; i++) {
name[i] = 'a';
}
name[name.length - 1] = (byte) 0;
IscsiTarget.newIscsiTarget(DUMMY_NAME_IQN, String.copyValueOf(name), DUMMY_DEVICE);
}
@Test(expected = IllegalArgumentException.class)
public void testAliasLengthLimitNonNullTerminated() {
final char[] name = new char[255];
for (int i = 0; i < name.length; i++) {
name[i] = 'a';
}
IscsiTarget.newIscsiTarget(DUMMY_NAME_IQN, String.copyValueOf(name), DUMMY_DEVICE);
}
@Test
public void testAliasLengthLimit() {
final char[] name = new char[255];
for (int i = 0; i < name.length; i++) {
name[i] = 'a';
}
name[name.length - 1] = (byte) 0;
IscsiTarget.newIscsiTarget(DUMMY_NAME_IQN, String.copyValueOf(name), DUMMY_DEVICE);
}
@Test
public void testTargetNameIqn() {
final IscsiTarget targetNoAlias = IscsiTarget.newIscsiTarget(DUMMY_NAME_IQN, null, DUMMY_DEVICE);
Assert.assertEquals(DUMMY_NAME_IQN, targetNoAlias.getTargetName());
Assert.assertNull(targetNoAlias.getTargetAlias());
final IscsiTarget targetAlias = IscsiTarget.newIscsiTarget(DUMMY_NAME_IQN, "My device alias \u20AC",
DUMMY_DEVICE);
Assert.assertEquals(DUMMY_NAME_IQN, targetAlias.getTargetName());
Assert.assertEquals("My device alias \u20AC", targetAlias.getTargetAlias());
Assert.assertTrue(targetAlias.equals(targetNoAlias));
Assert.assertTrue(targetAlias.equals(targetAlias));
Assert.assertFalse(targetAlias.equals("targetNoAlias"));
Assert.assertEquals(targetAlias.hashCode(), targetNoAlias.hashCode());
Assert.assertEquals(targetAlias.toString(), targetNoAlias.toString());
}
@Test
public void testTargetNameEui() {
final IscsiTarget targetNoAlias = IscsiTarget.newIscsiTarget(DUMMY_NAME_EUI, null, DUMMY_DEVICE);
Assert.assertEquals(DUMMY_NAME_EUI, targetNoAlias.getTargetName());
Assert.assertNull(targetNoAlias.getTargetAlias());
final IscsiTarget targetAlias = IscsiTarget.newIscsiTarget(DUMMY_NAME_EUI, "My device alias \u20AC",
DUMMY_DEVICE);
Assert.assertEquals(DUMMY_NAME_EUI, targetAlias.getTargetName());
Assert.assertEquals("My device alias \u20AC", targetAlias.getTargetAlias());
Assert.assertTrue(targetAlias.equals(targetNoAlias));
Assert.assertTrue(targetAlias.equals(targetAlias));
Assert.assertFalse(targetAlias.equals("targetNoAlias"));
Assert.assertEquals(targetAlias.hashCode(), targetNoAlias.hashCode());
Assert.assertEquals(targetAlias.toString(), targetNoAlias.toString());
}
}