/** * * Copyright 2020 Paul Schaub * * 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. */ package org.jivesoftware.smackx.stateless_file_sharing; import static org.jivesoftware.smack.test.util.XmlAssertUtil.assertXmlSimilar; import java.io.IOException; import java.util.Collections; import org.jivesoftware.smack.packet.StandardExtensionElement; import org.jivesoftware.smack.parsing.SmackParsingException; import org.jivesoftware.smack.test.util.SmackTestSuite; import org.jivesoftware.smack.test.util.TestUtils; import org.jivesoftware.smack.xml.XmlPullParserException; import org.jivesoftware.smackx.file_metadata.element.FileMetadataElement; import org.jivesoftware.smackx.hashes.HashManager; import org.jivesoftware.smackx.hashes.element.HashElement; import org.jivesoftware.smackx.stateless_file_sharing.element.FileSharingElement; import org.jivesoftware.smackx.stateless_file_sharing.element.SourcesElement; import org.jivesoftware.smackx.stateless_file_sharing.provider.FileSharingElementProvider; import org.jivesoftware.smackx.thumbnails.element.ThumbnailElement; import org.jivesoftware.smackx.urldata.element.UrlDataElement; import org.junit.jupiter.api.Test; public class FileSharingElementTest extends SmackTestSuite { @Test public void simpleElementTest() throws XmlPullParserException, IOException, SmackParsingException { FileSharingElement fileSharingElement = new FileSharingElement( FileMetadataElement.builder() .setMediaType("image/jpeg") .setName("summit.jpg") .setSize(3032449) .setDimensions(4096, 2160) .addHash(new HashElement(HashManager.ALGORITHM.SHA3_256, "2XarmwTlNxDAMkvymloX3S5+VbylNrJt/l5QyPa+YoU=")) .addHash(new HashElement(HashManager.ALGORITHM.BLAKE2B256, "2AfMGH8O7UNPTvUVAM9aK13mpCY=")) .addDescription("Photo from the summit.") .addThumbnail(new ThumbnailElement("cid:sha1+ffd7c8d28e9c5e82afea41f97108c6b4@bob.xmpp.org", "image/png", 128, 96)) .build(), new SourcesElement(Collections.singletonList( new UrlDataElement( "https://download.montague.lit/4a771ac1-f0b2-4a4a-9700-f2a26fa2bb67/summit.jpg", null ) ), Collections.singletonList( StandardExtensionElement.builder("jinglepub", "urn:xmpp:jinglepub:1") .addAttribute("from", "romeo@montague.lit/resource") .addAttribute("id", "9559976B-3FBF-4E7E-B457-2DAA225972BB") .addElement(new StandardExtensionElement("description", "urn:xmpp:jingle:apps:file-transfer:5")) .build() ))); final String expectedXml = "" + " \n" + " \n" + " image/jpeg\n" + " summit.jpg\n" + " 3032449\n" + " 4096\n" + " 2160\n" + " 2XarmwTlNxDAMkvymloX3S5+VbylNrJt/l5QyPa+YoU=\n" + " 2AfMGH8O7UNPTvUVAM9aK13mpCY=\n" + " Photo from the summit.\n" + " \n" + " \n" + " \n" + " \n" + " " + " \n" + " \n" + " \n" + " "; assertXmlSimilar(expectedXml, fileSharingElement.toXML().toString()); FileSharingElement parsed = FileSharingElementProvider.INSTANCE.parse(TestUtils.getParser(expectedXml)); // While I'd rather test for equality here, we have to compare XML instead, as thumbnail is not implemented // and we have to fall back to a StandardExtensionElement which has a non-ideal equals() implementation. assertXmlSimilar(expectedXml, parsed.toXML().toString()); } }