/*
* Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.security.MessageDigest;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.jar.Attributes.Name;
import java.util.stream.Collectors;
import sun.security.util.ManifestDigester;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Factory;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.AfterTest;
import org.testng.annotations.Test;
import static java.nio.charset.StandardCharsets.UTF_8;
import static org.testng.Assert.*;
/**
* @test
* @bug 8217375
* @modules java.base/sun.security.util
* @compile ../../tools/jarsigner/Utils.java
* @run testng DigestInput
* @summary Checks that the manifest main attributes and entry digests are the
* same as before resolution of bug 8217375 which means they treat some white
* space different for oldStyle or digestWorkaround except for the blank line
* at the end of the manifest file for digestWorkaround.
*/
public class DigestInput {
/**
* Filters some test cases for calibrating expected digests with previous
* implementation. TODO: Delete this after calibrating with old sources.
*/
static final boolean FIXED_8217375 = true; // FIXME
/**
* {@link ManifestDigester.Entry#digestWorkaround} should not feed the
* trailing blank line into the digester. Before resolution of 8217375 it
* fed the trailing blank line into the digest if the second line break
* was at the end of the file due to
* if (allBlank || (i == len-1)) {
* if (i == len-1)
* pos.endOfSection = i;
* else
* pos.endOfSection = last;
*
in {@link ManifestDigester#findSection}. In that case at the end
* of the manifest file, {@link ManifestDigester.Entry#digestWorkaround}
* would have produced the same digest as
* {@link ManifestDigester.Entry#digest} which was wrong and without effect
* at best.
*
* Once this fix is accepted, this flag can be removed along with
* {@link #assertDigestEqualsCatchWorkaroundBroken}.
*/
static final boolean FIXED_8217375_EOF_ENDOFSECTION = FIXED_8217375;
static final String SECTION_NAME = "some individual section name";
@DataProvider(name = "parameters")
public static Object[][] parameters() {
List