Size.java revision 5315:77b35c5c4b95
1224266Sadrian/* 2224266Sadrian * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. 3224266Sadrian * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4224266Sadrian * 5224266Sadrian * This code is free software; you can redistribute it and/or modify it 6224266Sadrian * under the terms of the GNU General Public License version 2 only, as 7224266Sadrian * published by the Free Software Foundation. 8224266Sadrian * 9224266Sadrian * This code is distributed in the hope that it will be useful, but WITHOUT 10224266Sadrian * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11224266Sadrian * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12224266Sadrian * version 2 for more details (a copy is included in the LICENSE file that 13224266Sadrian * accompanied this code). 14224266Sadrian * 15224266Sadrian * You should have received a copy of the GNU General Public License version 16224266Sadrian * 2 along with this work; if not, write to the Free Software Foundation, 17224266Sadrian * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18224266Sadrian * 19224266Sadrian * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20224266Sadrian * or visit www.oracle.com if you need additional information or have any 21224266Sadrian * questions. 22224266Sadrian */ 23224266Sadrian 24224266Sadrian/* @test 25224266Sadrian * @bug 4563125 26224266Sadrian * @summary Test size method of FileChannel 27224266Sadrian * @run main/othervm Size 28224266Sadrian */ 29224266Sadrian 30224266Sadrianimport java.io.*; 31224266Sadrianimport java.nio.MappedByteBuffer; 32224266Sadrianimport java.nio.channels.*; 33224266Sadrianimport java.util.Random; 34224266Sadrian 35224266Sadrian 36224266Sadrian/** 37224266Sadrian * Testing FileChannel's size method. 38224266Sadrian */ 39224266Sadrian 40224266Sadrianpublic class Size { 41224266Sadrian 42224266Sadrian private static Random generator = new Random(); 43224266Sadrian 44224266Sadrian private static File blah; 45224266Sadrian 46224266Sadrian public static void main(String[] args) throws Exception { 47224266Sadrian test1(); 48224266Sadrian test2(); 49224266Sadrian } 50224266Sadrian 51224266Sadrian private static void test1() throws Exception { 52224266Sadrian blah = File.createTempFile("blah", null); 53224266Sadrian blah.deleteOnExit(); 54224266Sadrian for(int i=0; i<100; i++) { 55224266Sadrian long testSize = generator.nextInt(1000); 56224266Sadrian initTestFile(blah, testSize); 57224266Sadrian FileInputStream fis = new FileInputStream(blah); 58224266Sadrian FileChannel c = fis.getChannel(); 59224266Sadrian if (c.size() != testSize) 60224266Sadrian throw new RuntimeException("Size failed"); 61224266Sadrian c.close(); 62224266Sadrian fis.close(); 63224266Sadrian } 64224266Sadrian blah.delete(); 65224266Sadrian } 66224266Sadrian 67224266Sadrian // Test for bug 4563125 68224266Sadrian private static void test2() throws Exception { 69224266Sadrian // Windows and Linux can't handle the really large file sizes for a truncate 70224266Sadrian // or a positional write required by the test for 4563125 71224266Sadrian String osName = System.getProperty("os.name"); 72224266Sadrian if (osName.startsWith("SunOS") || osName.contains("OS X")) { 73224266Sadrian blah = File.createTempFile("blah", null); 74224266Sadrian long testSize = ((long)Integer.MAX_VALUE) * 2; 75224266Sadrian initTestFile(blah, 10); 76224266Sadrian RandomAccessFile raf = new RandomAccessFile(blah, "rw"); 77224266Sadrian FileChannel fc = raf.getChannel(); 78224266Sadrian fc.size(); 79224266Sadrian fc.map(FileChannel.MapMode.READ_WRITE, testSize, 10); 80224266Sadrian if (fc.size() != testSize + 10) 81224266Sadrian throw new RuntimeException("Size failed " + fc.size()); 82224266Sadrian fc.close(); 83224266Sadrian raf.close(); 84224266Sadrian blah.delete(); 85224266Sadrian } 86224266Sadrian } 87224266Sadrian 88224266Sadrian /** 89224266Sadrian * Creates file blah of specified size in bytes. 90224266Sadrian * 91224266Sadrian */ 92224266Sadrian private static void initTestFile(File blah, long size) throws Exception { 93224266Sadrian if (blah.exists()) 94224266Sadrian blah.delete(); 95224266Sadrian FileOutputStream fos = new FileOutputStream(blah); 96224266Sadrian BufferedWriter awriter 97224266Sadrian = new BufferedWriter(new OutputStreamWriter(fos, "8859_1")); 98224266Sadrian 99224266Sadrian for(int i=0; i<size; i++) { 100224266Sadrian awriter.write("e"); 101224266Sadrian } 102224266Sadrian awriter.flush(); 103224266Sadrian awriter.close(); 104231710Sadrian } 105231710Sadrian} 106224266Sadrian