001: /* ====================================================================
002: Licensed to the Apache Software Foundation (ASF) under one or more
003: contributor license agreements. See the NOTICE file distributed with
004: this work for additional information regarding copyright ownership.
005: The ASF licenses this file to You under the Apache License, Version 2.0
006: (the "License"); you may not use this file except in compliance with
007: the License. You may obtain a copy of the License at
008:
009: http://www.apache.org/licenses/LICENSE-2.0
010:
011: Unless required by applicable law or agreed to in writing, software
012: distributed under the License is distributed on an "AS IS" BASIS,
013: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: See the License for the specific language governing permissions and
015: limitations under the License.
016: ==================================================================== */
017:
018: package org.apache.poi.poifs.storage;
019:
020: import java.io.*;
021:
022: import java.util.*;
023:
024: import junit.framework.*;
025:
026: import org.apache.poi.util.LittleEndian;
027: import org.apache.poi.util.LittleEndianConsts;
028:
029: /**
030: * Class to test HeaderBlockReader functionality
031: *
032: * @author Marc Johnson
033: */
034:
035: public class TestHeaderBlockReader extends TestCase {
036:
037: /**
038: * Constructor TestHeaderBlockReader
039: *
040: * @param name
041: */
042:
043: public TestHeaderBlockReader(String name) {
044: super (name);
045: }
046:
047: /**
048: * Test creating a HeaderBlockReader
049: *
050: * @exception IOException
051: */
052:
053: public void testConstructors() throws IOException {
054: byte[] content = { (byte) 0xD0, (byte) 0xCF, (byte) 0x11,
055: (byte) 0xE0, (byte) 0xA1, (byte) 0xB1, (byte) 0x1A,
056: (byte) 0xE1, (byte) 0x00, (byte) 0x00, (byte) 0x00,
057: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
058: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
059: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
060: (byte) 0x00, (byte) 0x3B, (byte) 0x00, (byte) 0x03,
061: (byte) 0x00, (byte) 0xFE, (byte) 0xFF, (byte) 0x09,
062: (byte) 0x00, (byte) 0x06, (byte) 0x00, (byte) 0x00,
063: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
064: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
065: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
066: (byte) 0x00, (byte) 0xFE, (byte) 0xFF, (byte) 0xFF,
067: (byte) 0xFF, (byte) 0x00, (byte) 0x00, (byte) 0x00,
068: (byte) 0x00, (byte) 0x00, (byte) 0x10, (byte) 0x00,
069: (byte) 0x00, (byte) 0xFE, (byte) 0xFF, (byte) 0xFF,
070: (byte) 0xFF, (byte) 0x01, (byte) 0x00, (byte) 0x00,
071: (byte) 0x00, (byte) 0xFE, (byte) 0xFF, (byte) 0xFF,
072: (byte) 0xFF, (byte) 0x00, (byte) 0x00, (byte) 0x00,
073: (byte) 0x00, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
074: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
075: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
076: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
077: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
078: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
079: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
080: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
081: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
082: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
083: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
084: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
085: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
086: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
087: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
088: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
089: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
090: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
091: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
092: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
093: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
094: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
095: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
096: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
097: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
098: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
099: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
100: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
101: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
102: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
103: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
104: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
105: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
106: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
107: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
108: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
109: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
110: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
111: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
112: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
113: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
114: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
115: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
116: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
117: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
118: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
119: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
120: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
121: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
122: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
123: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
124: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
125: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
126: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
127: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
128: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
129: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
130: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
131: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
132: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
133: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
134: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
135: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
136: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
137: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
138: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
139: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
140: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
141: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
142: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
143: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
144: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
145: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
146: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
147: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
148: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
149: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
150: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
151: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
152: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
153: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
154: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
155: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
156: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
157: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
158: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
159: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
160: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
161: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
162: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
163: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
164: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
165: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
166: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
167: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
168: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
169: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
170: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
171: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
172: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
173: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
174: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
175: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
176: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
177: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
178: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
179: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
180: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
181: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
182: (byte) 0xFF };
183: HeaderBlockReader block = new HeaderBlockReader(
184: new ByteArrayInputStream(content));
185:
186: assertEquals(-2, block.getPropertyStart());
187:
188: // verify we can't read a short block
189: byte[] shortblock = new byte[511];
190:
191: System.arraycopy(content, 0, shortblock, 0, 511);
192: try {
193: block = new HeaderBlockReader(new ByteArrayInputStream(
194: shortblock));
195: fail("Should have caught IOException reading a short block");
196: } catch (IOException ignored) {
197:
198: // as expected
199: }
200:
201: // try various forms of corruption
202: for (int index = 0; index < 8; index++) {
203: content[index] = (byte) (content[index] - 1);
204: try {
205: block = new HeaderBlockReader(new ByteArrayInputStream(
206: content));
207: fail("Should have caught IOException corrupting byte "
208: + index);
209: } catch (IOException ignored) {
210:
211: // as expected
212: }
213:
214: // restore byte value
215: content[index] = (byte) (content[index] + 1);
216: }
217: }
218:
219: /**
220: * main method to run the unit tests
221: *
222: * @param ignored_args
223: */
224:
225: public static void main(String[] ignored_args) {
226: System.out
227: .println("Testing org.apache.poi.poifs.storage.HeaderBlockReader");
228: junit.textui.TestRunner.run(TestHeaderBlockReader.class);
229: }
230: }
|