mirror of
https://github.com/google/nomulus.git
synced 2025-07-26 04:28:34 +02:00
Test vkey behaviors when in a task queue (#1406)
* Test vkey behavior in task queue
This commit is contained in:
parent
d29a527f4b
commit
421ed0a8d5
1 changed files with 111 additions and 0 deletions
|
@ -13,12 +13,17 @@
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
package google.registry.persistence;
|
package google.registry.persistence;
|
||||||
|
|
||||||
|
import static com.google.appengine.api.taskqueue.QueueFactory.getQueue;
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
import static com.google.common.truth.Truth8.assertThat;
|
import static com.google.common.truth.Truth8.assertThat;
|
||||||
import static google.registry.testing.DatabaseHelper.newDomainBase;
|
import static google.registry.testing.DatabaseHelper.newDomainBase;
|
||||||
import static google.registry.testing.DatabaseHelper.persistActiveContact;
|
import static google.registry.testing.DatabaseHelper.persistActiveContact;
|
||||||
|
import static google.registry.testing.TaskQueueHelper.assertTasksEnqueued;
|
||||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||||
|
|
||||||
|
import com.google.appengine.api.taskqueue.TaskOptions;
|
||||||
|
import com.google.common.base.Joiner;
|
||||||
|
import com.google.common.collect.ImmutableMap;
|
||||||
import com.googlecode.objectify.Key;
|
import com.googlecode.objectify.Key;
|
||||||
import com.googlecode.objectify.annotation.Entity;
|
import com.googlecode.objectify.annotation.Entity;
|
||||||
import google.registry.model.billing.BillingEvent.OneTime;
|
import google.registry.model.billing.BillingEvent.OneTime;
|
||||||
|
@ -26,7 +31,10 @@ import google.registry.model.domain.DomainBase;
|
||||||
import google.registry.model.registrar.RegistrarContact;
|
import google.registry.model.registrar.RegistrarContact;
|
||||||
import google.registry.model.translators.VKeyTranslatorFactory;
|
import google.registry.model.translators.VKeyTranslatorFactory;
|
||||||
import google.registry.testing.AppEngineExtension;
|
import google.registry.testing.AppEngineExtension;
|
||||||
|
import google.registry.testing.TaskQueueHelper.TaskMatcher;
|
||||||
import google.registry.testing.TestObject;
|
import google.registry.testing.TestObject;
|
||||||
|
import google.registry.util.Retrier;
|
||||||
|
import google.registry.util.TaskQueueUtils;
|
||||||
import org.junit.jupiter.api.BeforeAll;
|
import org.junit.jupiter.api.BeforeAll;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.junit.jupiter.api.extension.RegisterExtension;
|
import org.junit.jupiter.api.extension.RegisterExtension;
|
||||||
|
@ -39,8 +47,20 @@ class VKeyTest {
|
||||||
AppEngineExtension.builder()
|
AppEngineExtension.builder()
|
||||||
.withDatastoreAndCloudSql()
|
.withDatastoreAndCloudSql()
|
||||||
.withOfyTestEntities(TestObject.class)
|
.withOfyTestEntities(TestObject.class)
|
||||||
|
.withTaskQueue(
|
||||||
|
Joiner.on('\n')
|
||||||
|
.join(
|
||||||
|
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>",
|
||||||
|
"<queue-entries>",
|
||||||
|
" <queue>",
|
||||||
|
" <name>test-queue-for-vkey</name>",
|
||||||
|
" <rate>1/s</rate>",
|
||||||
|
" </queue>",
|
||||||
|
"</queue-entries>"))
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
|
private final TaskQueueUtils taskQueueUtils = new TaskQueueUtils(new Retrier(null, 1));
|
||||||
|
|
||||||
@BeforeAll
|
@BeforeAll
|
||||||
static void beforeAll() {
|
static void beforeAll() {
|
||||||
VKeyTranslatorFactory.addTestEntityClass(TestObject.class);
|
VKeyTranslatorFactory.addTestEntityClass(TestObject.class);
|
||||||
|
@ -307,6 +327,97 @@ class VKeyTest {
|
||||||
assertThat(VKey.create(vkey.stringify())).isEqualTo(vkey);
|
assertThat(VKey.create(vkey.stringify())).isEqualTo(vkey);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Verifies a complete key can go into task queue and comes out unscathed.
|
||||||
|
*
|
||||||
|
* <p>TaskOption objects are being used here instead of Task objects, despite that we are in the
|
||||||
|
* process of migrating to using Cloud Tasks API, the stringify() and create() were written with
|
||||||
|
* the intention to handle all types of vkeys, inlcuding ofy only vkeys. The purpose of the
|
||||||
|
* following test cases is to make sure we don't deploy the system with parameters that don't work
|
||||||
|
* in the current implementation. Once migration is done, the following test cases with TaskOption
|
||||||
|
* or TaskHandle will go away.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
void testStringifyThenCreate_ofyOnlyVKeyIntaskQueue_success() throws Exception {
|
||||||
|
VKey<TestObject> vkey =
|
||||||
|
VKey.createOfy(TestObject.class, Key.create(TestObject.class, "tmpKey"));
|
||||||
|
|
||||||
|
String vkeyStringFromQueue =
|
||||||
|
ImmutableMap.copyOf(
|
||||||
|
taskQueueUtils
|
||||||
|
.enqueue(
|
||||||
|
getQueue("test-queue-for-vkey"),
|
||||||
|
TaskOptions.Builder.withUrl("/the/path").param("vkey", vkey.stringify()))
|
||||||
|
.extractParams())
|
||||||
|
.get("vkey");
|
||||||
|
|
||||||
|
assertTasksEnqueued(
|
||||||
|
"test-queue-for-vkey", new TaskMatcher().url("/the/path").param("vkey", vkey.stringify()));
|
||||||
|
assertThat(vkeyStringFromQueue).isEqualTo(vkey.stringify());
|
||||||
|
assertThat(VKey.create(vkeyStringFromQueue)).isEqualTo(vkey);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testStringifyThenCreate_sqlOnlyVKeyIntaskQueue_success() throws Exception {
|
||||||
|
VKey<TestObject> vkey = VKey.createSql(TestObject.class, "sqlKey");
|
||||||
|
|
||||||
|
String vkeyStringFromQueue =
|
||||||
|
ImmutableMap.copyOf(
|
||||||
|
taskQueueUtils
|
||||||
|
.enqueue(
|
||||||
|
getQueue("test-queue-for-vkey"),
|
||||||
|
TaskOptions.Builder.withUrl("/the/path").param("vkey", vkey.stringify()))
|
||||||
|
.extractParams())
|
||||||
|
.get("vkey");
|
||||||
|
|
||||||
|
assertTasksEnqueued(
|
||||||
|
"test-queue-for-vkey", new TaskMatcher().url("/the/path").param("vkey", vkey.stringify()));
|
||||||
|
assertThat(vkeyStringFromQueue).isEqualTo(vkey.stringify());
|
||||||
|
assertThat(VKey.create(vkeyStringFromQueue)).isEqualTo(vkey);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testStringifyThenCreate_generalVKeyIntaskQueue_success() throws Exception {
|
||||||
|
VKey<TestObject> vkey =
|
||||||
|
VKey.create(TestObject.class, "12345", Key.create(TestObject.class, "12345"));
|
||||||
|
|
||||||
|
String vkeyStringFromQueue =
|
||||||
|
ImmutableMap.copyOf(
|
||||||
|
taskQueueUtils
|
||||||
|
.enqueue(
|
||||||
|
getQueue("test-queue-for-vkey"),
|
||||||
|
TaskOptions.Builder.withUrl("/the/path").param("vkey", vkey.stringify()))
|
||||||
|
.extractParams())
|
||||||
|
.get("vkey");
|
||||||
|
|
||||||
|
assertTasksEnqueued(
|
||||||
|
"test-queue-for-vkey", new TaskMatcher().url("/the/path").param("vkey", vkey.stringify()));
|
||||||
|
assertThat(vkeyStringFromQueue).isEqualTo(vkey.stringify());
|
||||||
|
assertThat(VKey.create(vkeyStringFromQueue)).isEqualTo(vkey);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testStringifyThenCreate_vkeyFromWebsafeStringIntaskQueue_success() throws Exception {
|
||||||
|
VKey<DomainBase> vkey =
|
||||||
|
VKey.fromWebsafeKey(
|
||||||
|
Key.create(newDomainBase("example.com", "ROID-1", persistActiveContact("contact-1")))
|
||||||
|
.getString());
|
||||||
|
|
||||||
|
String vkeyStringFromQueue =
|
||||||
|
ImmutableMap.copyOf(
|
||||||
|
taskQueueUtils
|
||||||
|
.enqueue(
|
||||||
|
getQueue("test-queue-for-vkey"),
|
||||||
|
TaskOptions.Builder.withUrl("/the/path").param("vkey", vkey.stringify()))
|
||||||
|
.extractParams())
|
||||||
|
.get("vkey");
|
||||||
|
|
||||||
|
assertTasksEnqueued(
|
||||||
|
"test-queue-for-vkey", new TaskMatcher().url("/the/path").param("vkey", vkey.stringify()));
|
||||||
|
assertThat(vkeyStringFromQueue).isEqualTo(vkey.stringify());
|
||||||
|
assertThat(VKey.create(vkeyStringFromQueue)).isEqualTo(vkey);
|
||||||
|
}
|
||||||
|
|
||||||
@Entity
|
@Entity
|
||||||
static class OtherObject {}
|
static class OtherObject {}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue