package com.mongodb.hadoop.io;
import com.mongodb.BasicDBObject;
import org.bson.types.ObjectId;
import org.junit.Test;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
public class MongoUpdateWritableTest {
@Test
public void testSerialization() throws Exception {
BasicDBObject query = new BasicDBObject("_id", new ObjectId());
BasicDBObject modifiers = new BasicDBObject("$set", new BasicDBObject("foo", "bar"));
MongoUpdateWritable writable =
new MongoUpdateWritable(query, modifiers, true, false, true);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream out = new DataOutputStream(baos);
writable.write(out);
baos.flush();
byte[] serializedBytes = baos.toByteArray();
ByteArrayInputStream bais = new ByteArrayInputStream(serializedBytes);
DataInputStream in = new DataInputStream(bais);
MongoUpdateWritable blank = new MongoUpdateWritable();
blank.readFields(in);
assertEquals(writable, blank);
}
@Test
public void testEquals() {
BasicDBObject query1 = new BasicDBObject("_id", new ObjectId());
BasicDBObject query2 = new BasicDBObject("_id", new ObjectId());
BasicDBObject modifiers1 = new BasicDBObject("$set", new
BasicDBObject("foo", "bar"));
BasicDBObject modifiers2 = new BasicDBObject("$set", new
BasicDBObject("bar", "baz"));
MongoUpdateWritable writable = new MongoUpdateWritable(query1,
modifiers1, true, false, false);
// Not equal because queries differ.
MongoUpdateWritable diffQuery = new MongoUpdateWritable(query2,
modifiers1, true, false, false);
assertNotEquals(writable, diffQuery);
// Not equal because modifiers differ.
MongoUpdateWritable diffModifier = new MongoUpdateWritable(query1,
modifiers2, true, false, false);
assertNotEquals(writable, diffModifier);
// Not equal because upsert flag differs.
MongoUpdateWritable diffUpsert = new MongoUpdateWritable(query1,
modifiers1, false, false, false);
assertNotEquals(writable, diffUpsert);
// Not equal because multi flag differs.
MongoUpdateWritable diffMulti = new MongoUpdateWritable(query1,
modifiers1, true, true, false);
assertNotEquals(writable, diffMulti);
// Not equal because replace flag differs.
MongoUpdateWritable diffReplace = new MongoUpdateWritable(query1,
modifiers1, true, false, true);
assertNotEquals(writable, diffReplace);
MongoUpdateWritable same = new MongoUpdateWritable(query1, modifiers1,
true, false, false);
assertEquals(writable, same);
// Test defaults for simple constructor.
MongoUpdateWritable simpleConstructor =
new MongoUpdateWritable(query1, modifiers1);
assertEquals(writable, simpleConstructor);
}
}