/*
* © Copyright IBM Corp. 2014
*
* 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 com.ibm.sbt.services.client.connections.activities;
import java.io.IOException;
import java.io.InputStream;
import java.io.StringReader;
import java.io.StringWriter;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Map;
import javax.activity.ActivityRequiredException;
import junit.framework.TestFailure;
import org.apache.commons.io.IOUtils;
import org.junit.Assert;
import org.junit.Test;
import org.junit.experimental.categories.Categories.ExcludeCategory;
import com.ibm.commons.xml.XMLException;
import com.ibm.sbt.services.client.ClientServicesException;
import com.ibm.sbt.services.client.base.datahandlers.EntityList;
/**
* @author mwallace
*
*/
public class ActivityLargeFieldTest extends BaseActivityServiceTest {
@Test
@org.junit.Ignore("Issue with Mime Depdency")
public void testCreateNodesWithLargeFields() throws ClientServicesException, XMLException, UnsupportedEncodingException {
StringBuilder nodeContent = new StringBuilder();
nodeContent.append("Swords Rush ~start~county=Waterford;town=Dunmore~end~ ");
for (int i=0; i<4096; i++) {
nodeContent.append('0');
}
StringBuilder fieldContent = new StringBuilder();
fieldContent.append("Ballsbridge, Howth ~start~town=Westport;county=Mayo~end~ ");
for (int i=0; i<4096; i++) {
fieldContent.append('0');
}
Activity activity = new Activity();
activity.setTitle(createActivityTitle());
activity.setContent(nodeContent.toString());
TextField textField = new TextField();
textField.setName("large_field");
textField.setPosition(1000);
textField.setSummary(fieldContent.toString());
textField.setHidden(true); // only hidden text fields can have more than 512 bytes
activity.addField(textField);
Activity createdActivity = activityService.createActivity(activity);
this.activity = null;
Activity readActivity = activityService.getActivity(createdActivity.getActivityUuid());
System.out.println("CREATED: " + createdActivity.toXmlString());
System.out.println("READ: " + readActivity.toXmlString());
System.out.println("BYTES: " + ((TextField)readActivity.getFieldByName("large_field")).getSummary().getBytes("UTF-8").length);
System.out.println("LENGTH: " + ((TextField)readActivity.getFieldByName("large_field")).getSummary().length());
ActivityNode activityNode = new ActivityNode();
activityNode.setActivityUuid(createdActivity.getActivityUuid());
activityNode.setTitle(createActivityNodeTitle());
activityNode.setType(ActivityNode.TYPE_ENTRY);
activityNode.setContent(nodeContent.toString());
activityNode.addField(textField);
ActivityNode createdNode = activityService.createActivityNode(activityNode);
ActivityNode readNode = activityService.getActivityNode(createdNode.getActivityNodeUuid());
System.out.println("CREATED: " + createdNode.toXmlString());
System.out.println("READ: " + readNode.toXmlString());
System.out.println("BYTES: " + ((TextField)readNode.getFieldByName("large_field")).getSummary().getBytes("UTF-8").length);
System.out.println("LENGTH: " + ((TextField)readNode.getFieldByName("large_field")).getSummary().length());
}
@Test(expected=ClientServicesException.class)
@org.junit.Ignore("Issue with Mime Depdency")
public void testCreateLargeFieldFails() throws ClientServicesException, XMLException, UnsupportedEncodingException {
StringBuilder content = new StringBuilder();
for (int i=0; i<4096; i++) {
content.append('0');
}
Activity activity = createActivity();
ActivityNode activityNode = new ActivityNode();
activityNode.setActivityUuid(activity.getActivityUuid());
activityNode.setTitle(createActivityNodeTitle());
activityNode.setType(ActivityNode.TYPE_ENTRY);
TextField textField = new TextField();
textField.setName("large_field");
textField.setPosition(1000);
textField.setSummary(content.toString());
activityNode.addField(textField);
activityService.createActivityNode(activityNode);
}
@Test
@org.junit.Ignore("Issue with Mime Depdency")
public void testCreateLargeFields() throws ClientServicesException, XMLException, IOException {
InputStream stream = readFile("latin.txt");
String content = IOUtils.toString(stream);
System.out.println("CONTENT SIZE: "+content.length());
Activity activity = new Activity();
activity.setTitle(createActivityTitle());
activity.setContent("Activity-"+System.currentTimeMillis());
TextField textField = new TextField();
textField.setName("large_field");
textField.setPosition(1000);
textField.setSummary(content);
textField.setHidden(true); // only hidden text fields can have more than 512 bytes
activity.addField(textField);
activityService.createActivity(activity);
System.out.println(activity.toXmlString());
this.activity = null;
ActivityNode activityEntry = new ActivityNode();
activityEntry.setActivityUuid(activity.getActivityUuid());
activityEntry.setTitle("Entry");
activityEntry.setType(ActivityNode.TYPE_ENTRY);
activityEntry.setContent(content);
activityEntry.addField(textField);
activityService.createActivityNode(activityEntry);
System.out.println(activityEntry.toXmlString());
ActivityNode activityReply = new ActivityNode();
activityReply.setActivityUuid(activity.getActivityUuid());
activityReply.setInReplyTo(activityEntry);
activityReply.setTitle("Reply");
activityReply.setType(ActivityNode.TYPE_ENTRY);
activityReply.setContent(content);
activityReply.addField(textField);
activityService.createActivityNode(activityReply);
System.out.println(activityReply.toXmlString());
}
@Test
@org.junit.Ignore("Issue with Mime Depdency")
public void testLargeFieldMyActivities() throws ClientServicesException, XMLException, IOException {
InputStream stream = readFile("latin.txt");
String content = IOUtils.toString(stream);
System.out.println("Content Size: "+content.length());
Activity activity = new Activity();
activity.setTitle(createActivityTitle());
activity.setContent("Activity-"+System.currentTimeMillis());
TextField textField = new TextField();
textField.setName("large_field");
textField.setPosition(1000);
textField.setSummary(content);
textField.setHidden(true); // only hidden text fields can have more than 512 bytes
activity.addField(textField);
activityService.createActivity(activity);
System.out.println("Created Activity");
System.out.println(activity.toXmlString());
Field[] fields = activity.getFields();
Assert.assertNotNull(fields);
Assert.assertEquals(1, fields.length);
Assert.assertNotNull(((TextField)fields[0]).getLink());
this.activity = null;
Map<String, String> params = new HashMap<String, String>();
params.put("includeEnclosureLink", "true");
EntityList<Activity> activities = activityService.getMyActivities(params);
System.out.println("Get My Activities First Activity");
System.out.println(activities.get(0).toXmlString());
fields = activities.get(0).getFields();
Assert.assertNotNull(fields);
Assert.assertEquals(1, fields.length);
Assert.assertTrue(((TextField)fields[0]).isHidden());
Assert.assertNotNull(((TextField)fields[0]).getLink());
}
}