/*
* 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.brooklyn.util.text;
import static org.testng.Assert.assertEquals;
import java.util.Arrays;
import org.apache.brooklyn.test.FixedLocaleTest;
import org.apache.brooklyn.util.text.ByteSizeStrings;
import org.apache.brooklyn.util.text.Strings;
import org.testng.annotations.Test;
import com.google.common.collect.Iterables;
/**
* Test the different {@link ByteSizeStrings} formatting options using a list of byte sizes.
*/
@Test
public class ByteSizeStringsTest extends FixedLocaleTest {
public void testSizeString() {
assertEquals(Strings.makeSizeString(-1), "-1 B");
assertEquals(Strings.makeSizeString(0), "0 B");
assertEquals(Strings.makeSizeString(999), "999 B");
assertEquals(Strings.makeSizeString(1024), "1024 B");
assertEquals(Strings.makeSizeString(1234), "1234 B");
assertEquals(Strings.makeSizeString(2345), "2.34 kB");
assertEquals(Strings.makeSizeString(4096), "4.10 kB");
assertEquals(Strings.makeSizeString(4567), "4.57 kB");
assertEquals(Strings.makeSizeString(65535), "65.5 kB");
assertEquals(Strings.makeSizeString(23456789L), "23.5 MB");
assertEquals(Strings.makeSizeString(23456789012L), "23.5 GB");
assertEquals(Strings.makeSizeString(23456789012345L), "23.5 TB");
assertEquals(Strings.makeSizeString(Long.MAX_VALUE), "9223372 TB");
}
public void testJavaSizeString() {
assertEquals(ByteSizeStrings.java().makeSizeString(-1), "-1");
assertEquals(ByteSizeStrings.java().makeSizeString(0), "0");
assertEquals(ByteSizeStrings.java().makeSizeString(999), "999");
assertEquals(ByteSizeStrings.java().makeSizeString(1024), "1024");
assertEquals(ByteSizeStrings.java().makeSizeString(1234), "1234");
assertEquals(ByteSizeStrings.java().makeSizeString(2345), "2345");
assertEquals(ByteSizeStrings.java().makeSizeString(4096), "4096");
assertEquals(ByteSizeStrings.java().makeSizeString(4567), "4567");
assertEquals(ByteSizeStrings.java().makeSizeString(6789), "6789");
assertEquals(ByteSizeStrings.java().makeSizeString(65535), "64k");
assertEquals(ByteSizeStrings.java().makeSizeString(23456789L), "22m");
assertEquals(ByteSizeStrings.java().makeSizeString(23456789012L), "22g");
assertEquals(ByteSizeStrings.java().makeSizeString(23456789012345L), "21000g");
assertEquals(ByteSizeStrings.java().makeSizeString(Long.MAX_VALUE), "8388608000g");
}
public void testISOSizeString() {
assertEquals(ByteSizeStrings.iso().makeSizeString(-1), "-1 B");
assertEquals(ByteSizeStrings.iso().makeSizeString(0), "0 B");
assertEquals(ByteSizeStrings.iso().makeSizeString(999), "999 B");
assertEquals(ByteSizeStrings.iso().makeSizeString(1024), "1024 B");
assertEquals(ByteSizeStrings.iso().makeSizeString(1234), "1234 B");
assertEquals(ByteSizeStrings.iso().makeSizeString(2345), "2.29 KiB");
assertEquals(ByteSizeStrings.iso().makeSizeString(4096), "4 KiB");
assertEquals(ByteSizeStrings.iso().makeSizeString(4567), "4.46 KiB");
assertEquals(ByteSizeStrings.iso().makeSizeString(6789), "6.63 KiB");
assertEquals(ByteSizeStrings.iso().makeSizeString(65535), "64.0 KiB");
assertEquals(ByteSizeStrings.iso().makeSizeString(23456789L), "22.4 MiB");
assertEquals(ByteSizeStrings.iso().makeSizeString(23456789012L), "21.8 GiB");
assertEquals(ByteSizeStrings.iso().makeSizeString(23456789012345L), "21.3 TiB");
assertEquals(ByteSizeStrings.iso().makeSizeString(Long.MAX_VALUE), "8388608 TiB");
}
public void testBuilder() {
ByteSizeStrings strings = ByteSizeStrings.builder()
.bytesPerMetricUnit(1024)
.precision(4)
.lowerLimit(5)
.maxLen(4)
.suffixBytes("b")
.suffixKilo("kb")
.suffixMega("Mb")
.suffixGiga("Gb")
.suffixTera("Tb")
.addSpace()
.build();
assertEquals(strings.makeSizeString(-1), "-1 b");
assertEquals(strings.makeSizeString(0), "0 b");
assertEquals(strings.makeSizeString(999), "999 b");
assertEquals(strings.makeSizeString(1024), "1024 b");
assertEquals(strings.makeSizeString(1234), "1234 b");
assertEquals(strings.makeSizeString(2345), "2345 b");
assertEquals(strings.makeSizeString(4096), "4096 b");
assertEquals(strings.makeSizeString(4567), "4567 b");
assertEquals(strings.makeSizeString(6789), "6.630 kb");
assertEquals(strings.makeSizeString(65535), "64.00 kb");
assertEquals(strings.makeSizeString(23456789L), "22.37 Mb");
assertEquals(strings.makeSizeString(23456789012L), "21.85 Gb");
assertEquals(strings.makeSizeString(23456789012345L), "21.33 Tb");
assertEquals(strings.makeSizeString(Long.MAX_VALUE), "8388608 Tb");
}
public void testFormatter() {
ByteSizeStrings iso = ByteSizeStrings.iso();
assertEquals(String.format("%s", iso.formatted(23456789L)), "22.4 MiB");
assertEquals(String.format("%.6s", iso.formatted(23456789L)), "22.3701 MiB");
assertEquals(String.format("%#s", iso.formatted(23456789L)), "23.5 MB");
}
public void testFunction() {
ByteSizeStrings iso = ByteSizeStrings.iso();
Iterable<String> bytes = Iterables.transform(Arrays.asList(23456789L, 23456789012L, 23456789012345L), iso);
assertEquals(Iterables.get(bytes, 0), "22.4 MiB");
assertEquals(Iterables.get(bytes, 1), "21.8 GiB");
assertEquals(Iterables.get(bytes, 2), "21.3 TiB");
}
public void testParse() {
assertEquals(ByteSizeStrings.parse("1", "k"), 1024);
// basics
assertEquals(ByteSizeStrings.parse("1b"), 1);
assertEquals(ByteSizeStrings.parse("1k"), 1024);
assertEquals(ByteSizeStrings.parse("1m"), 1024*1024);
assertEquals(ByteSizeStrings.parse("1g"), 1024*1024*1024);
assertEquals(ByteSizeStrings.parse("1t"), 1024L*1024*1024*1024);
// iso
assertEquals(ByteSizeStrings.parse("64.0 KiB"), 65536);
// metric
assertEquals(ByteSizeStrings.parse("64.0 KB"), 64000);
// java
assertEquals(ByteSizeStrings.parse("64.0k"), 65536);
// spaces and things
assertEquals(ByteSizeStrings.parse("64k"), 65536);
assertEquals(ByteSizeStrings.parse("64 k"), 65536);
// smaller than zero
assertEquals(ByteSizeStrings.parse("0.5t"), 512L*1024*1024*1024);
// applying default unit
assertEquals(ByteSizeStrings.parse("1", "k"), 1024);
// not applying default unit
assertEquals(ByteSizeStrings.parse("1k", "m"), 1024);
// forcing use of metric
assertEquals(ByteSizeStrings.parse("1k", "m", ByteSizeStrings.metric()), 1000);
}
}