Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
atlas
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
dataplatform
atlas
Commits
c0b4975b
Commit
c0b4975b
authored
Nov 17, 2015
by
Shwetha GS
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ATLAS-300 Need additional integration test coverage for entity notifications…
ATLAS-300 Need additional integration test coverage for entity notifications (tbeerbower via shwethags)
parent
35d42ad1
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
331 additions
and
122 deletions
+331
-122
EntityNotificationImplTest.java
...atlas/notification/entity/EntityNotificationImplTest.java
+73
-74
release-log.txt
release-log.txt
+1
-0
EntityNotificationIT.java
...a/org/apache/atlas/notification/EntityNotificationIT.java
+257
-48
No files found.
notification/src/test/java/org/apache/atlas/notification/entity/EntityNotificationImplTest.java
View file @
c0b4975b
...
@@ -42,108 +42,108 @@ import static org.testng.Assert.assertTrue;
...
@@ -42,108 +42,108 @@ import static org.testng.Assert.assertTrue;
*/
*/
public
class
EntityNotificationImplTest
{
public
class
EntityNotificationImplTest
{
@Test
@Test
public
void
testGetEntity
()
throws
Exception
{
public
void
testGetEntity
()
throws
Exception
{
Referenceable
entity
=
getEntity
(
"id"
);
Referenceable
entity
=
getEntity
(
"id"
);
EntityNotificationImpl
entityNotification
=
EntityNotificationImpl
entityNotification
=
new
EntityNotificationImpl
(
entity
,
EntityNotification
.
OperationType
.
ENTITY_CREATE
,
new
EntityNotificationImpl
(
entity
,
EntityNotification
.
OperationType
.
ENTITY_CREATE
,
Collections
.<
IStruct
>
emptyList
());
Collections
.<
IStruct
>
emptyList
());
assertEquals
(
entity
,
entityNotification
.
getEntity
());
assertEquals
(
entity
,
entityNotification
.
getEntity
());
}
}
@Test
@Test
public
void
testGetOperationType
()
throws
Exception
{
public
void
testGetOperationType
()
throws
Exception
{
Referenceable
entity
=
getEntity
(
"id"
);
Referenceable
entity
=
getEntity
(
"id"
);
EntityNotificationImpl
entityNotification
=
EntityNotificationImpl
entityNotification
=
new
EntityNotificationImpl
(
entity
,
EntityNotification
.
OperationType
.
ENTITY_CREATE
,
new
EntityNotificationImpl
(
entity
,
EntityNotification
.
OperationType
.
ENTITY_CREATE
,
Collections
.<
IStruct
>
emptyList
());
Collections
.<
IStruct
>
emptyList
());
assertEquals
(
EntityNotification
.
OperationType
.
ENTITY_CREATE
,
entityNotification
.
getOperationType
());
assertEquals
(
EntityNotification
.
OperationType
.
ENTITY_CREATE
,
entityNotification
.
getOperationType
());
}
}
@Test
@Test
public
void
testGetAllTraits
()
throws
Exception
{
public
void
testGetAllTraits
()
throws
Exception
{
Referenceable
entity
=
getEntity
(
"id"
);
Referenceable
entity
=
getEntity
(
"id"
);
String
traitName
=
"MyTrait"
;
String
traitName
=
"MyTrait"
;
List
<
IStruct
>
traitInfo
=
new
LinkedList
<>();
List
<
IStruct
>
traitInfo
=
new
LinkedList
<>();
IStruct
trait
=
new
Struct
(
traitName
,
Collections
.<
String
,
Object
>
emptyMap
());
IStruct
trait
=
new
Struct
(
traitName
,
Collections
.<
String
,
Object
>
emptyMap
());
traitInfo
.
add
(
trait
);
traitInfo
.
add
(
trait
);
EntityNotificationImpl
entityNotification
=
EntityNotificationImpl
entityNotification
=
new
EntityNotificationImpl
(
entity
,
EntityNotification
.
OperationType
.
TRAIT_ADD
,
traitInfo
);
new
EntityNotificationImpl
(
entity
,
EntityNotification
.
OperationType
.
TRAIT_ADD
,
traitInfo
);
assertEquals
(
traitInfo
,
entityNotification
.
getAllTraits
());
assertEquals
(
traitInfo
,
entityNotification
.
getAllTraits
());
}
}
@Test
@Test
public
void
testGetAllTraits_superTraits
()
throws
Exception
{
public
void
testGetAllTraits_superTraits
()
throws
Exception
{
TypeSystem
typeSystem
=
mock
(
TypeSystem
.
class
);
TypeSystem
typeSystem
=
mock
(
TypeSystem
.
class
);
String
traitName
=
"MyTrait"
;
String
traitName
=
"MyTrait"
;
IStruct
myTrait
=
new
Struct
(
traitName
);
IStruct
myTrait
=
new
Struct
(
traitName
);
String
superTraitName
=
"MySuperTrait"
;
String
superTraitName
=
"MySuperTrait"
;
TraitType
traitDef
=
mock
(
TraitType
.
class
);
TraitType
traitDef
=
mock
(
TraitType
.
class
);
Set
<
String
>
superTypeNames
=
Collections
.
singleton
(
superTraitName
);
Set
<
String
>
superTypeNames
=
Collections
.
singleton
(
superTraitName
);
TraitType
superTraitDef
=
mock
(
TraitType
.
class
);
TraitType
superTraitDef
=
mock
(
TraitType
.
class
);
Set
<
String
>
superSuperTypeNames
=
Collections
.
emptySet
();
Set
<
String
>
superSuperTypeNames
=
Collections
.
emptySet
();
Referenceable
entity
=
getEntity
(
"id"
,
myTrait
);
Referenceable
entity
=
getEntity
(
"id"
,
myTrait
);
when
(
typeSystem
.
getDataType
(
TraitType
.
class
,
traitName
)).
thenReturn
(
traitDef
);
when
(
typeSystem
.
getDataType
(
TraitType
.
class
,
traitName
)).
thenReturn
(
traitDef
);
when
(
typeSystem
.
getDataType
(
TraitType
.
class
,
superTraitName
)).
thenReturn
(
superTraitDef
);
when
(
typeSystem
.
getDataType
(
TraitType
.
class
,
superTraitName
)).
thenReturn
(
superTraitDef
);
when
(
traitDef
.
getAllSuperTypeNames
()).
thenReturn
(
superTypeNames
);
when
(
traitDef
.
getAllSuperTypeNames
()).
thenReturn
(
superTypeNames
);
when
(
superTraitDef
.
getAllSuperTypeNames
()).
thenReturn
(
superSuperTypeNames
);
when
(
superTraitDef
.
getAllSuperTypeNames
()).
thenReturn
(
superSuperTypeNames
);
EntityNotificationImpl
entityNotification
=
EntityNotificationImpl
entityNotification
=
new
EntityNotificationImpl
(
entity
,
EntityNotification
.
OperationType
.
TRAIT_ADD
,
typeSystem
);
new
EntityNotificationImpl
(
entity
,
EntityNotification
.
OperationType
.
TRAIT_ADD
,
typeSystem
);
List
<
IStruct
>
allTraits
=
entityNotification
.
getAllTraits
();
List
<
IStruct
>
allTraits
=
entityNotification
.
getAllTraits
();
assertEquals
(
2
,
allTraits
.
size
());
assertEquals
(
2
,
allTraits
.
size
());
for
(
IStruct
trait
:
allTraits
)
{
for
(
IStruct
trait
:
allTraits
)
{
String
typeName
=
trait
.
getTypeName
();
String
typeName
=
trait
.
getTypeName
();
assertTrue
(
typeName
.
equals
(
traitName
)
||
typeName
.
equals
(
superTraitName
));
assertTrue
(
typeName
.
equals
(
traitName
)
||
typeName
.
equals
(
superTraitName
));
}
}
}
}
@Test
@Test
public
void
testEquals
()
throws
Exception
{
public
void
testEquals
()
throws
Exception
{
Referenceable
entity
=
getEntity
(
"id"
);
Referenceable
entity
=
getEntity
(
"id"
);
EntityNotificationImpl
entityNotification2
=
EntityNotificationImpl
entityNotification2
=
new
EntityNotificationImpl
(
entity
,
EntityNotification
.
OperationType
.
ENTITY_CREATE
,
new
EntityNotificationImpl
(
entity
,
EntityNotification
.
OperationType
.
ENTITY_CREATE
,
Collections
.<
IStruct
>
emptyList
());
Collections
.<
IStruct
>
emptyList
());
EntityNotificationImpl
entityNotification
=
EntityNotificationImpl
entityNotification
=
new
EntityNotificationImpl
(
entity
,
EntityNotification
.
OperationType
.
ENTITY_CREATE
,
new
EntityNotificationImpl
(
entity
,
EntityNotification
.
OperationType
.
ENTITY_CREATE
,
Collections
.<
IStruct
>
emptyList
());
Collections
.<
IStruct
>
emptyList
());
assertTrue
(
entityNotification
.
equals
(
entityNotification2
));
assertTrue
(
entityNotification
.
equals
(
entityNotification2
));
assertTrue
(
entityNotification2
.
equals
(
entityNotification
));
assertTrue
(
entityNotification2
.
equals
(
entityNotification
));
}
}
private
Referenceable
getEntity
(
String
id
,
IStruct
...
traits
)
{
private
Referenceable
getEntity
(
String
id
,
IStruct
...
traits
)
{
String
typeName
=
"typeName"
;
String
typeName
=
"typeName"
;
Map
<
String
,
Object
>
values
=
new
HashMap
<>();
Map
<
String
,
Object
>
values
=
new
HashMap
<>();
List
<
String
>
traitNames
=
new
LinkedList
<>();
List
<
String
>
traitNames
=
new
LinkedList
<>();
Map
<
String
,
IStruct
>
traitMap
=
new
HashMap
<>();
Map
<
String
,
IStruct
>
traitMap
=
new
HashMap
<>();
for
(
IStruct
trait
:
traits
)
{
for
(
IStruct
trait
:
traits
)
{
String
traitName
=
trait
.
getTypeName
();
String
traitName
=
trait
.
getTypeName
();
traitNames
.
add
(
traitName
);
traitNames
.
add
(
traitName
);
traitMap
.
put
(
traitName
,
trait
);
traitMap
.
put
(
traitName
,
trait
);
}
return
new
Referenceable
(
id
,
typeName
,
values
,
traitNames
,
traitMap
);
}
}
return
new
Referenceable
(
id
,
typeName
,
values
,
traitNames
,
traitMap
);
}
}
}
\ No newline at end of file
release-log.txt
View file @
c0b4975b
...
@@ -9,6 +9,7 @@ ATLAS-54 Rename configs in hive hook (shwethags)
...
@@ -9,6 +9,7 @@ ATLAS-54 Rename configs in hive hook (shwethags)
ATLAS-3 Mixed Index creation fails with Date types (sumasai via shwethags)
ATLAS-3 Mixed Index creation fails with Date types (sumasai via shwethags)
ALL CHANGES:
ALL CHANGES:
ATLAS-300 Need additional integration test coverage for entity notifications (tbeerbower via shwethags)
ATLAS-304 surefire fails to run tests if maven project directory path has embedded space(dkantor via sumasai)
ATLAS-304 surefire fails to run tests if maven project directory path has embedded space(dkantor via sumasai)
ATLAS-301 Atlas Distribution module test is failing (yhemanth via shwethags)
ATLAS-301 Atlas Distribution module test is failing (yhemanth via shwethags)
ATLAS-114 Upgrade hbase client to 1.1.2 (sumasai)
ATLAS-114 Upgrade hbase client to 1.1.2 (sumasai)
...
...
webapp/src/test/java/org/apache/atlas/notification/EntityNotificationIT.java
View file @
c0b4975b
...
@@ -18,84 +18,293 @@
...
@@ -18,84 +18,293 @@
package
org
.
apache
.
atlas
.
notification
;
package
org
.
apache
.
atlas
.
notification
;
import
com.google.common.collect.ImmutableList
;
import
com.google.inject.Inject
;
import
com.google.inject.Inject
;
import
com.sun.jersey.api.client.ClientResponse
;
import
com.sun.jersey.api.client.WebResource
;
import
org.apache.atlas.notification.entity.EntityNotification
;
import
org.apache.atlas.notification.entity.EntityNotification
;
import
org.apache.atlas.typesystem.IReferenceableInstance
;
import
org.apache.atlas.typesystem.IStruct
;
import
org.apache.atlas.typesystem.Referenceable
;
import
org.apache.atlas.typesystem.Referenceable
;
import
org.apache.atlas.typesystem.Struct
;
import
org.apache.atlas.typesystem.json.InstanceSerialization
;
import
org.apache.atlas.typesystem.json.TypesSerialization
$
;
import
org.apache.atlas.typesystem.persistence.Id
;
import
org.apache.atlas.typesystem.types.HierarchicalTypeDefinition
;
import
org.apache.atlas.typesystem.types.TraitType
;
import
org.apache.atlas.typesystem.types.utils.TypesUtil
;
import
org.apache.atlas.web.resources.BaseResourceIT
;
import
org.apache.atlas.web.resources.BaseResourceIT
;
import
org.apache.atlas.web.util.Servlets
;
import
org.junit.AfterClass
;
import
org.testng.Assert
;
import
org.testng.Assert
;
import
org.testng.annotations.BeforeClass
;
import
org.testng.annotations.BeforeClass
;
import
org.testng.annotations.BeforeMethod
;
import
org.testng.annotations.Guice
;
import
org.testng.annotations.Guice
;
import
org.testng.annotations.Test
;
import
org.testng.annotations.Test
;
import
javax.ws.rs.HttpMethod
;
import
javax.ws.rs.core.Response
;
import
java.util.Collections
;
import
java.util.LinkedList
;
import
java.util.List
;
import
java.util.List
;
import
static
org
.
testng
.
Assert
.*;
/**
/**
* Entity Notification Integration Tests.
* Entity Notification Integration Tests.
*/
*/
@Guice
(
modules
=
NotificationModule
.
class
)
@Guice
(
modules
=
NotificationModule
.
class
)
public
class
EntityNotificationIT
extends
BaseResourceIT
{
public
class
EntityNotificationIT
extends
BaseResourceIT
{
@Inject
private
static
final
String
ENTITIES
=
"api/atlas/entities"
;
private
NotificationInterface
notificationInterface
;
private
static
final
String
TRAITS
=
"traits"
;
private
static
final
int
MAX_WAIT_TIME
=
10000
;
private
final
String
DATABASE_NAME
=
"db"
+
randomString
();
private
final
String
TABLE_NAME
=
"table"
+
randomString
();
@Inject
private
NotificationInterface
notificationInterface
;
private
EntityNotificationConsumer
notificationConsumer
;
private
Id
tableId
;
private
String
traitName
;
@BeforeClass
public
void
setUp
()
throws
Exception
{
super
.
setUp
();
createTypeDefinitions
();
List
<
NotificationConsumer
<
EntityNotification
>>
consumers
=
notificationInterface
.
createConsumers
(
NotificationInterface
.
NotificationType
.
ENTITIES
,
1
);
NotificationConsumer
<
EntityNotification
>
consumer
=
consumers
.
iterator
().
next
();
notificationConsumer
=
new
EntityNotificationConsumer
(
consumer
);
notificationConsumer
.
start
();
}
@AfterClass
public
void
tearDown
()
{
notificationConsumer
.
stop
();
}
@BeforeMethod
public
void
setupTest
()
{
notificationConsumer
.
reset
();
}
@Test
public
void
testCreateEntity
()
throws
Exception
{
Referenceable
tableInstance
=
createHiveTableInstance
(
DATABASE_NAME
,
TABLE_NAME
);
tableId
=
createInstance
(
tableInstance
);
final
String
guid
=
tableId
.
_getId
();
@BeforeClass
waitForNotification
(
MAX_WAIT_TIME
);
public
void
setUp
()
throws
Exception
{
super
.
setUp
();
createTypeDefinitions
();
}
@Test
EntityNotification
entityNotification
=
notificationConsumer
.
getLastEntityNotification
();
public
void
testEntityNotification
()
throws
Exception
{
List
<
NotificationConsumer
<
EntityNotification
>>
consumers
=
assertNotNull
(
entityNotification
);
notificationInterface
.
createConsumers
(
NotificationInterface
.
NotificationType
.
ENTITIES
,
1
);
assertEquals
(
EntityNotification
.
OperationType
.
ENTITY_CREATE
,
entityNotification
.
getOperationType
()
);
NotificationConsumer
<
EntityNotification
>
consumer
=
consumers
.
iterator
().
next
();
IReferenceableInstance
entity
=
entityNotification
.
getEntity
();
final
EntityNotificationConsumer
notificationConsumer
=
new
EntityNotificationConsumer
(
consumer
);
Thread
thread
=
new
Thread
(
notificationConsumer
);
assertEquals
(
HIVE_TABLE_TYPE
,
entity
.
getTypeName
());
thread
.
start
();
assertEquals
(
guid
,
entity
.
getId
().
_getId
());
}
createEntity
(
"Sales"
,
"Sales Database"
,
"John ETL"
,
"hdfs://host:8000/apps/warehouse/sales"
);
@Test
(
dependsOnMethods
=
"testCreateEntity"
)
public
void
testUpdateEntity
()
throws
Exception
{
final
String
property
=
"description"
;
final
String
newValue
=
"New description!"
;
waitFor
(
10000
,
new
Predicate
()
{
final
String
guid
=
tableId
.
_getId
();
@Override
public
boolean
evaluate
()
throws
Exception
{
return
notificationConsumer
.
entityNotification
!=
null
;
}
});
Assert
.
assertNotNull
(
notificationConsumer
.
entityNotification
);
serviceClient
.
updateEntity
(
guid
,
property
,
newValue
);
Assert
.
assertEquals
(
EntityNotification
.
OperationType
.
ENTITY_CREATE
,
notificationConsumer
.
entityNotification
.
getOperationType
());
Assert
.
assertEquals
(
DATABASE_TYPE
,
notificationConsumer
.
entityNotification
.
getEntity
().
getTypeName
());
Assert
.
assertEquals
(
"Sales"
,
notificationConsumer
.
entityNotification
.
getEntity
().
get
(
"name"
));
}
private
void
createEntity
(
String
name
,
String
description
,
String
owner
,
String
locationUri
,
String
...
traitNames
)
waitForNotification
(
MAX_WAIT_TIME
);
throws
Exception
{
Referenceable
referenceable
=
new
Referenceable
(
DATABASE_TYPE
,
traitNames
);
EntityNotification
entityNotification
=
notificationConsumer
.
getLastEntityNotification
();
referenceable
.
set
(
"name"
,
name
);
referenceable
.
set
(
"description"
,
description
);
referenceable
.
set
(
"owner"
,
owner
);
referenceable
.
set
(
"locationUri"
,
locationUri
);
referenceable
.
set
(
"createTime"
,
System
.
currentTimeMillis
());
createInstance
(
referenceable
);
assertNotNull
(
entityNotification
);
}
assertEquals
(
EntityNotification
.
OperationType
.
ENTITY_UPDATE
,
entityNotification
.
getOperationType
());
private
static
class
EntityNotificationConsumer
implements
Runnable
{
IReferenceableInstance
entity
=
entityNotification
.
getEntity
();
private
final
NotificationConsumer
<
EntityNotification
>
consumerIterator
;
private
EntityNotification
entityNotification
=
null
;
public
EntityNotificationConsumer
(
NotificationConsumer
<
EntityNotification
>
consumerIterator
)
{
assertEquals
(
HIVE_TABLE_TYPE
,
entity
.
getTypeName
());
this
.
consumerIterator
=
consumerIterator
;
assertEquals
(
guid
,
entity
.
getId
().
_getId
());
assertEquals
(
newValue
,
entity
.
getValuesMap
().
get
(
property
));
}
}
@Override
@Test
(
dependsOnMethods
=
"testCreateEntity"
)
public
void
run
()
{
public
void
testAddTrait
()
throws
Exception
{
while
(
consumerIterator
.
hasNext
())
{
String
superSuperTraitName
=
"SuperTrait"
+
randomString
();
entityNotification
=
consumerIterator
.
next
();
createTrait
(
superSuperTraitName
);
}
String
superTraitName
=
"SuperTrait"
+
randomString
();
createTrait
(
superTraitName
,
superSuperTraitName
);
traitName
=
"Trait"
+
randomString
();
createTrait
(
traitName
,
superTraitName
);
Struct
traitInstance
=
new
Struct
(
traitName
);
String
traitInstanceJSON
=
InstanceSerialization
.
toJson
(
traitInstance
,
true
);
LOG
.
debug
(
"Trait instance = "
+
traitInstanceJSON
);
final
String
guid
=
tableId
.
_getId
();
ClientResponse
clientResponse
=
addTrait
(
guid
,
traitInstanceJSON
);
assertEquals
(
clientResponse
.
getStatus
(),
Response
.
Status
.
CREATED
.
getStatusCode
());
waitForNotification
(
MAX_WAIT_TIME
);
EntityNotification
entityNotification
=
notificationConsumer
.
getLastEntityNotification
();
assertNotNull
(
entityNotification
);
assertEquals
(
EntityNotification
.
OperationType
.
TRAIT_ADD
,
entityNotification
.
getOperationType
());
IReferenceableInstance
entity
=
entityNotification
.
getEntity
();
assertEquals
(
HIVE_TABLE_TYPE
,
entity
.
getTypeName
());
assertEquals
(
guid
,
entity
.
getId
().
_getId
());
assertTrue
(
entity
.
getTraits
().
contains
(
traitName
));
List
<
IStruct
>
allTraits
=
entityNotification
.
getAllTraits
();
List
<
String
>
allTraitNames
=
new
LinkedList
<>();
for
(
IStruct
struct
:
allTraits
)
{
allTraitNames
.
add
(
struct
.
getTypeName
());
}
assertTrue
(
allTraitNames
.
contains
(
traitName
));
assertTrue
(
allTraitNames
.
contains
(
superTraitName
));
assertTrue
(
allTraitNames
.
contains
(
superSuperTraitName
));
// add another trait with the same super type to the entity
notificationConsumer
.
reset
();
String
anotherTraitName
=
"Trait"
+
randomString
();
createTrait
(
anotherTraitName
,
superTraitName
);
traitInstance
=
new
Struct
(
anotherTraitName
);
traitInstanceJSON
=
InstanceSerialization
.
toJson
(
traitInstance
,
true
);
LOG
.
debug
(
"Trait instance = "
+
traitInstanceJSON
);
clientResponse
=
addTrait
(
guid
,
traitInstanceJSON
);
assertEquals
(
clientResponse
.
getStatus
(),
Response
.
Status
.
CREATED
.
getStatusCode
());
waitForNotification
(
MAX_WAIT_TIME
);
entityNotification
=
notificationConsumer
.
getLastEntityNotification
();
assertNotNull
(
entityNotification
);
assertEquals
(
EntityNotification
.
OperationType
.
TRAIT_ADD
,
entityNotification
.
getOperationType
());
allTraits
=
entityNotification
.
getAllTraits
();
allTraitNames
=
new
LinkedList
<>();
for
(
IStruct
struct
:
allTraits
)
{
allTraitNames
.
add
(
struct
.
getTypeName
());
}
assertTrue
(
allTraitNames
.
contains
(
traitName
));
assertTrue
(
allTraitNames
.
contains
(
anotherTraitName
));
// verify that the super type shows up twice in all traits
assertEquals
(
2
,
Collections
.
frequency
(
allTraitNames
,
superTraitName
));
}
@Test
(
dependsOnMethods
=
"testAddTrait"
)
public
void
testDeleteTrait
()
throws
Exception
{
final
String
guid
=
tableId
.
_getId
();
ClientResponse
clientResponse
=
deleteTrait
(
guid
,
traitName
);
Assert
.
assertEquals
(
clientResponse
.
getStatus
(),
Response
.
Status
.
OK
.
getStatusCode
());
waitForNotification
(
MAX_WAIT_TIME
);
EntityNotification
entityNotification
=
notificationConsumer
.
getLastEntityNotification
();
assertNotNull
(
entityNotification
);
assertEquals
(
EntityNotification
.
OperationType
.
TRAIT_DELETE
,
entityNotification
.
getOperationType
());
IReferenceableInstance
entity
=
entityNotification
.
getEntity
();
assertEquals
(
HIVE_TABLE_TYPE
,
entity
.
getTypeName
());
assertEquals
(
guid
,
entity
.
getId
().
_getId
());
assertFalse
(
entity
.
getTraits
().
contains
(
traitName
));
}
// ----- helper methods ---------------------------------------------------
private
void
createTrait
(
String
traitName
,
String
...
superTraitNames
)
throws
Exception
{
HierarchicalTypeDefinition
<
TraitType
>
trait
=
TypesUtil
.
createTraitTypeDef
(
traitName
,
ImmutableList
.
copyOf
(
superTraitNames
));
String
traitDefinitionJSON
=
TypesSerialization
$
.
MODULE
$
.
toJson
(
trait
,
true
);
LOG
.
debug
(
"Trait definition = "
+
traitDefinitionJSON
);
createType
(
traitDefinitionJSON
);
}
private
ClientResponse
addTrait
(
String
guid
,
String
traitInstance
)
{
WebResource
resource
=
service
.
path
(
ENTITIES
).
path
(
guid
).
path
(
TRAITS
);
return
resource
.
accept
(
Servlets
.
JSON_MEDIA_TYPE
)
.
type
(
Servlets
.
JSON_MEDIA_TYPE
)
.
method
(
HttpMethod
.
POST
,
ClientResponse
.
class
,
traitInstance
);
}
private
ClientResponse
deleteTrait
(
String
guid
,
String
traitName
)
{
WebResource
resource
=
service
.
path
(
ENTITIES
).
path
(
guid
).
path
(
TRAITS
).
path
(
traitName
);
return
resource
.
accept
(
Servlets
.
JSON_MEDIA_TYPE
).
type
(
Servlets
.
JSON_MEDIA_TYPE
)
.
method
(
HttpMethod
.
DELETE
,
ClientResponse
.
class
);
}
private
void
waitForNotification
(
int
maxWait
)
throws
Exception
{
waitFor
(
maxWait
,
new
Predicate
()
{
@Override
public
boolean
evaluate
()
throws
Exception
{
return
notificationConsumer
.
getLastEntityNotification
()
!=
null
;
}
});
}
// ----- inner class : EntityNotificationConsumer --------------------------
private
static
class
EntityNotificationConsumer
implements
Runnable
{
private
final
NotificationConsumer
<
EntityNotification
>
consumerIterator
;
private
EntityNotification
entityNotification
=
null
;
private
boolean
run
;
public
EntityNotificationConsumer
(
NotificationConsumer
<
EntityNotification
>
consumerIterator
)
{
this
.
consumerIterator
=
consumerIterator
;
}
@Override
public
void
run
()
{
while
(
run
&&
consumerIterator
.
hasNext
())
{
entityNotification
=
consumerIterator
.
next
();
}
}
public
void
reset
()
{
entityNotification
=
null
;
}
public
void
start
()
{
Thread
thread
=
new
Thread
(
this
);
run
=
true
;
thread
.
start
();
}
public
void
stop
()
{
run
=
false
;
}
public
EntityNotification
getLastEntityNotification
()
{
return
entityNotification
;
}
}
}
}
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment