killbill-memoizeit

util: don't trust user-specified UUID in CustomFieldModelDao Move

8/18/2015 6:56:03 PM

Details

diff --git a/account/src/test/java/org/killbill/billing/account/dao/TestAccountDao.java b/account/src/test/java/org/killbill/billing/account/dao/TestAccountDao.java
index 1ead069..70a3947 100644
--- a/account/src/test/java/org/killbill/billing/account/dao/TestAccountDao.java
+++ b/account/src/test/java/org/killbill/billing/account/dao/TestAccountDao.java
@@ -1,7 +1,9 @@
 /*
  * Copyright 2010-2013 Ning, Inc.
+ * Copyright 2014-2015 Groupon, Inc
+ * Copyright 2014-2015 The Billing Project, LLC
  *
- * Ning licenses this file to you under the Apache License, version 2.0
+ * The Billing Project licenses this file to you 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:
  *
@@ -41,8 +43,6 @@ import org.killbill.billing.util.api.TagDefinitionApiException;
 import org.killbill.billing.util.audit.AuditLog;
 import org.killbill.billing.util.audit.ChangeType;
 import org.killbill.billing.util.audit.DefaultAccountAuditLogs;
-import org.killbill.billing.util.customfield.CustomField;
-import org.killbill.billing.util.customfield.StringCustomField;
 import org.killbill.billing.util.customfield.dao.CustomFieldModelDao;
 import org.killbill.billing.util.dao.TableName;
 import org.killbill.billing.util.entity.Pagination;
@@ -169,8 +169,7 @@ public class TestAccountDao extends AccountTestSuiteWithEmbeddedDB {
         final String fieldName = UUID.randomUUID().toString().substring(0, 4);
         final String fieldValue = UUID.randomUUID().toString();
 
-        final CustomField field = new StringCustomField(fieldName, fieldValue, ObjectType.ACCOUNT, accountId, internalCallContext.getCreatedDate());
-        customFieldDao.create(new CustomFieldModelDao(field), internalCallContext);
+        customFieldDao.create(new CustomFieldModelDao(internalCallContext.getCreatedDate(), fieldName, fieldValue, accountId, ObjectType.ACCOUNT), internalCallContext);
 
         final List<CustomFieldModelDao> customFieldMap = customFieldDao.getCustomFieldsForObject(accountId, ObjectType.ACCOUNT, internalCallContext);
         Assert.assertEquals(customFieldMap.size(), 1);
diff --git a/util/src/main/java/org/killbill/billing/util/customfield/api/DefaultCustomFieldUserApi.java b/util/src/main/java/org/killbill/billing/util/customfield/api/DefaultCustomFieldUserApi.java
index ad05b91..5abac28 100644
--- a/util/src/main/java/org/killbill/billing/util/customfield/api/DefaultCustomFieldUserApi.java
+++ b/util/src/main/java/org/killbill/billing/util/customfield/api/DefaultCustomFieldUserApi.java
@@ -119,7 +119,7 @@ public class DefaultCustomFieldUserApi implements CustomFieldUserApi {
         }
 
         for (CustomField cur : toBeInserted) {
-            customFieldDao.create(new CustomFieldModelDao(cur), internalCallContextFactory.createInternalCallContext(cur.getObjectId(), cur.getObjectType(), context));
+            customFieldDao.create(new CustomFieldModelDao(context.getCreatedDate(), cur.getFieldName(), cur.getFieldValue(), cur.getObjectId(), cur.getObjectType()), internalCallContextFactory.createInternalCallContext(cur.getObjectId(), cur.getObjectType(), context));
         }
     }
 
diff --git a/util/src/main/java/org/killbill/billing/util/customfield/dao/CustomFieldModelDao.java b/util/src/main/java/org/killbill/billing/util/customfield/dao/CustomFieldModelDao.java
index 7a96c92..9f4371b 100644
--- a/util/src/main/java/org/killbill/billing/util/customfield/dao/CustomFieldModelDao.java
+++ b/util/src/main/java/org/killbill/billing/util/customfield/dao/CustomFieldModelDao.java
@@ -19,11 +19,10 @@ package org.killbill.billing.util.customfield.dao;
 import java.util.UUID;
 
 import org.joda.time.DateTime;
-
 import org.killbill.billing.ObjectType;
+import org.killbill.billing.util.UUIDs;
 import org.killbill.billing.util.customfield.CustomField;
 import org.killbill.billing.util.dao.TableName;
-import org.killbill.billing.entity.EntityBase;
 import org.killbill.billing.util.entity.dao.EntityModelDao;
 import org.killbill.billing.util.entity.dao.EntityModelDaoBase;
 
@@ -48,9 +47,8 @@ public class CustomFieldModelDao extends EntityModelDaoBase implements EntityMod
         this.isActive = true;
     }
 
-    public CustomFieldModelDao(final CustomField customField) {
-        this(customField.getId(), customField.getCreatedDate(), customField.getUpdatedDate(), customField.getFieldName(),
-             customField.getFieldValue(), customField.getObjectId(), customField.getObjectType());
+    public CustomFieldModelDao(final DateTime createdDate, final String fieldName, final String fieldValue, final UUID objectId, final ObjectType objectType) {
+        this(UUIDs.randomUUID(), createdDate, createdDate, fieldName, fieldValue, objectId, objectType);
     }
 
     public String getFieldName() {
diff --git a/util/src/test/java/org/killbill/billing/util/customfield/api/TestDefaultCustomFieldUserApi.java b/util/src/test/java/org/killbill/billing/util/customfield/api/TestDefaultCustomFieldUserApi.java
index 3be0174..5a60177 100644
--- a/util/src/test/java/org/killbill/billing/util/customfield/api/TestDefaultCustomFieldUserApi.java
+++ b/util/src/test/java/org/killbill/billing/util/customfield/api/TestDefaultCustomFieldUserApi.java
@@ -62,7 +62,10 @@ public class TestDefaultCustomFieldUserApi extends UtilTestSuiteWithEmbeddedDB {
         // Verify the field was saved
         final List<CustomField> customFields = customFieldUserApi.getCustomFieldsForObject(accountId, ObjectType.ACCOUNT, callContext);
         Assert.assertEquals(customFields.size(), 1);
-        Assert.assertEquals(customFields.get(0), customField);
+        Assert.assertEquals(customFields.get(0).getFieldName(), customField.getFieldName());
+        Assert.assertEquals(customFields.get(0).getFieldValue(), customField.getFieldValue());
+        Assert.assertEquals(customFields.get(0).getObjectId(), customField.getObjectId());
+        Assert.assertEquals(customFields.get(0).getObjectType(), customField.getObjectType());
         // Verify the account_record_id was populated
         dbi.withHandle(new HandleCallback<Void>() {
             @Override
diff --git a/util/src/test/java/org/killbill/billing/util/customfield/TestFieldStore.java b/util/src/test/java/org/killbill/billing/util/customfield/TestFieldStore.java
index 9051563..9eed986 100644
--- a/util/src/test/java/org/killbill/billing/util/customfield/TestFieldStore.java
+++ b/util/src/test/java/org/killbill/billing/util/customfield/TestFieldStore.java
@@ -1,7 +1,9 @@
 /*
  * Copyright 2010-2011 Ning, Inc.
+ * Copyright 2014-2015 Groupon, Inc
+ * Copyright 2014-2015 The Billing Project, LLC
  *
- * Ning licenses this file to you under the Apache License, version 2.0
+ * The Billing Project licenses this file to you 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:
  *
@@ -18,13 +20,12 @@ package org.killbill.billing.util.customfield;
 
 import java.util.UUID;
 
-import org.testng.annotations.Test;
-
 import org.killbill.billing.ObjectType;
 import org.killbill.billing.api.TestApiListener.NextEvent;
 import org.killbill.billing.util.UtilTestSuiteWithEmbeddedDB;
 import org.killbill.billing.util.api.CustomFieldApiException;
 import org.killbill.billing.util.customfield.dao.CustomFieldModelDao;
+import org.testng.annotations.Test;
 
 public class TestFieldStore extends UtilTestSuiteWithEmbeddedDB {
 
@@ -36,16 +37,14 @@ public class TestFieldStore extends UtilTestSuiteWithEmbeddedDB {
         String fieldName = "TestField1";
         String fieldValue = "Kitty Hawk";
 
-        final CustomField field = new StringCustomField(fieldName, fieldValue, objectType, id, internalCallContext.getCreatedDate());
         eventsListener.pushExpectedEvent(NextEvent.CUSTOM_FIELD);
-        customFieldDao.create(new CustomFieldModelDao(field), internalCallContext);
+        customFieldDao.create(new CustomFieldModelDao(internalCallContext.getCreatedDate(), fieldName, fieldValue, id, objectType), internalCallContext);
         assertListenerStatus();
 
         fieldName = "TestField2";
         fieldValue = "Cape Canaveral";
-        final CustomField field2 = new StringCustomField(fieldName, fieldValue, objectType, id, internalCallContext.getCreatedDate());
         eventsListener.pushExpectedEvent(NextEvent.CUSTOM_FIELD);
-        customFieldDao.create(new CustomFieldModelDao(field2), internalCallContext);
+        customFieldDao.create(new CustomFieldModelDao(internalCallContext.getCreatedDate(), fieldName, fieldValue, id, objectType), internalCallContext);
         assertListenerStatus();
     }
 }