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
c37656cc
Commit
c37656cc
authored
6 years ago
by
Sarath Subramanian
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ATLAS-3157: Add Integration tests for Hive metastore hook
parent
e050bc06
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
85 additions
and
47 deletions
+85
-47
HiveITBase.java
...ridge/src/test/java/org/apache/atlas/hive/HiveITBase.java
+50
-5
HiveHookIT.java
.../src/test/java/org/apache/atlas/hive/hook/HiveHookIT.java
+30
-42
HiveMetastoreHookIT.java
.../java/org/apache/atlas/hive/hook/HiveMetastoreHookIT.java
+0
-0
hive-site.xml
addons/hive-bridge/src/test/resources/hive-site.xml
+5
-0
No files found.
addons/hive-bridge/src/test/java/org/apache/atlas/hive/HiveITBase.java
View file @
c37656cc
...
...
@@ -22,6 +22,7 @@ import com.google.common.annotations.VisibleForTesting;
import
org.apache.atlas.ApplicationProperties
;
import
org.apache.atlas.AtlasClient
;
import
org.apache.atlas.AtlasClientV2
;
import
org.apache.atlas.AtlasServiceException
;
import
org.apache.atlas.hive.bridge.ColumnLineageUtils
;
import
org.apache.atlas.hive.bridge.HiveMetaStoreBridge
;
import
org.apache.atlas.hive.hook.HiveHookIT
;
...
...
@@ -67,7 +68,10 @@ import java.util.Set;
import
java.util.SortedMap
;
import
java.util.SortedSet
;
import
static
com
.
sun
.
jersey
.
api
.
client
.
ClientResponse
.
Status
.
NOT_FOUND
;
import
static
org
.
apache
.
atlas
.
hive
.
bridge
.
HiveMetaStoreBridge
.
HDFS_PATH
;
import
static
org
.
apache
.
atlas
.
hive
.
hook
.
events
.
BaseHiveEvent
.
ATTRIBUTE_QUALIFIED_NAME
;
import
static
org
.
apache
.
atlas
.
hive
.
model
.
HiveDataTypes
.
HIVE_DB
;
import
static
org
.
testng
.
Assert
.
assertEquals
;
import
static
org
.
testng
.
Assert
.
assertNotNull
;
import
static
org
.
testng
.
Assert
.
assertTrue
;
...
...
@@ -103,6 +107,11 @@ public class HiveITBase {
//Set-up hive session
conf
=
new
HiveConf
();
conf
.
setClassLoader
(
Thread
.
currentThread
().
getContextClassLoader
());
conf
.
set
(
"hive.metastore.event.listeners"
,
""
);
// 'driver' using this configuration will be used for tests in HiveHookIT
// HiveHookIT will use this driver to test post-execution hooks in HiveServer2.
// initialize 'driver' with HMS hook disabled.
driver
=
new
Driver
(
conf
);
ss
=
new
SessionState
(
conf
);
ss
=
SessionState
.
start
(
ss
);
...
...
@@ -112,6 +121,7 @@ public class HiveITBase {
Configuration
configuration
=
ApplicationProperties
.
get
();
String
[]
atlasEndPoint
=
configuration
.
getStringArray
(
HiveMetaStoreBridge
.
ATLAS_ENDPOINT
);
if
(
atlasEndPoint
==
null
||
atlasEndPoint
.
length
==
0
)
{
atlasEndPoint
=
new
String
[]
{
DGI_URL
};
}
...
...
@@ -122,16 +132,21 @@ public class HiveITBase {
}
else
{
atlasClientV2
=
new
AtlasClientV2
(
atlasEndPoint
);
atlasClient
=
new
AtlasClient
(
atlasEndPoint
);
}
hiveMetaStoreBridge
=
new
HiveMetaStoreBridge
(
configuration
,
conf
,
atlasClientV2
);
HiveConf
conf
=
new
HiveConf
();
conf
.
set
(
"hive.exec.post.hooks"
,
""
);
SessionState
ss
=
new
SessionState
(
conf
);
ss
=
SessionState
.
start
(
ss
);
SessionState
.
setCurrentSessionState
(
ss
);
// 'driverWithoutContext' using this configuration will be used for tests in HiveMetastoreHookIT
// HiveMetastoreHookIT will use this driver to test event listeners in HiveMetastore.
// initialize 'driverWithoutContext' with HiveServer2 post execution hook disabled.
driverWithoutContext
=
new
Driver
(
conf
);
}
...
...
@@ -149,8 +164,11 @@ public class HiveITBase {
protected
void
runCommandWithDelay
(
Driver
driver
,
String
cmd
,
int
sleepMs
)
throws
Exception
{
LOG
.
debug
(
"Running command '{}'"
,
cmd
);
CommandProcessorResponse
response
=
driver
.
run
(
cmd
);
assertEquals
(
response
.
getResponseCode
(),
0
);
if
(
sleepMs
!=
0
)
{
Thread
.
sleep
(
sleepMs
);
}
...
...
@@ -182,11 +200,15 @@ public class HiveITBase {
}
protected
String
random
()
{
return
RandomStringUtils
.
randomAlphanumeric
(
10
);
return
RandomStringUtils
.
randomAlphanumeric
(
10
)
.
toLowerCase
()
;
}
protected
String
tableName
()
{
return
"table"
+
random
();
return
"table_"
+
random
();
}
protected
String
dbName
()
{
return
"db_"
+
random
();
}
protected
String
assertTableIsRegistered
(
String
dbName
,
String
tableName
)
throws
Exception
{
...
...
@@ -336,12 +358,35 @@ public class HiveITBase {
}
protected
String
assertDatabaseIsRegistered
(
String
dbName
,
AssertPredicate
assertPredicate
)
throws
Exception
{
LOG
.
debug
(
"Searching for database: {}"
,
dbName
);
String
dbQualifiedName
=
HiveMetaStoreBridge
.
getDBQualifiedName
(
CLUSTER_NAME
,
dbName
);
return
assertEntityIsRegistered
(
HIVE_DB
.
getName
(),
REFERENCEABLE_ATTRIBUTE_NAME
,
dbQualifiedName
,
assertPredicate
);
}
public
void
assertDatabaseIsNotRegistered
(
String
dbName
)
throws
Exception
{
LOG
.
debug
(
"Searching for database {}"
,
dbName
);
String
dbQualifiedName
=
HiveMetaStoreBridge
.
getDBQualifiedName
(
CLUSTER_NAME
,
dbName
);
return
assertEntityIsRegistered
(
HiveDataTypes
.
HIVE_DB
.
getName
(),
REFERENCEABLE_ATTRIBUTE_NAME
,
dbQualifiedName
,
assertPredicate
);
assertEntityIsNotRegistered
(
HIVE_DB
.
getName
(),
ATTRIBUTE_QUALIFIED_NAME
,
dbQualifiedName
);
}
protected
void
assertEntityIsNotRegistered
(
final
String
typeName
,
final
String
property
,
final
String
value
)
throws
Exception
{
// wait for sufficient time before checking if entity is not available.
long
waitTime
=
2000
;
LOG
.
debug
(
"Waiting for {} msecs, before asserting entity is not registered."
,
waitTime
);
Thread
.
sleep
(
waitTime
);
try
{
atlasClientV2
.
getEntityByAttribute
(
typeName
,
Collections
.
singletonMap
(
property
,
value
));
fail
(
String
.
format
(
"Entity was not supposed to exist for typeName = %s, attributeName = %s, attributeValue = %s"
,
typeName
,
property
,
value
));
}
catch
(
AtlasServiceException
e
)
{
if
(
e
.
getStatus
()
==
NOT_FOUND
)
{
return
;
}
}
}
protected
AtlasEntity
getAtlasEntityByType
(
String
type
,
String
id
)
throws
Exception
{
AtlasEntity
atlasEntity
=
null
;
...
...
This diff is collapsed.
Click to expand it.
addons/hive-bridge/src/test/java/org/apache/atlas/hive/hook/HiveHookIT.java
View file @
c37656cc
...
...
@@ -28,12 +28,8 @@ import org.apache.atlas.hive.HiveITBase;
import
org.apache.atlas.hive.bridge.HiveMetaStoreBridge
;
import
org.apache.atlas.hive.hook.events.BaseHiveEvent
;
import
org.apache.atlas.hive.model.HiveDataTypes
;
import
org.apache.atlas.model.instance.AtlasClassification
;
import
org.apache.atlas.model.instance.AtlasEntity
;
import
org.apache.atlas.model.instance.AtlasEntityHeader
;
import
org.apache.atlas.model.instance.*
;
import
org.apache.atlas.model.instance.AtlasEntity.AtlasEntityWithExtInfo
;
import
org.apache.atlas.model.instance.AtlasObjectId
;
import
org.apache.atlas.model.instance.AtlasStruct
;
import
org.apache.atlas.model.lineage.AtlasLineageInfo
;
import
org.apache.atlas.model.typedef.AtlasClassificationDef
;
import
org.apache.atlas.model.typedef.AtlasTypesDef
;
...
...
@@ -41,18 +37,22 @@ import org.apache.atlas.type.AtlasTypeUtil;
import
org.apache.commons.collections.CollectionUtils
;
import
org.apache.commons.lang.StringUtils
;
import
org.apache.hadoop.fs.Path
;
import
org.apache.hadoop.hive.conf.HiveConf
;
import
org.apache.hadoop.hive.metastore.TableType
;
import
org.apache.hadoop.hive.metastore.api.hive_metastoreConstants
;
import
org.apache.hadoop.hive.ql.Driver
;
import
org.apache.hadoop.hive.ql.hooks.Entity
;
import
org.apache.hadoop.hive.ql.hooks.ReadEntity
;
import
org.apache.hadoop.hive.ql.hooks.WriteEntity
;
import
org.apache.hadoop.hive.ql.metadata.HiveException
;
import
org.apache.hadoop.hive.ql.metadata.Table
;
import
org.apache.hadoop.hive.ql.plan.HiveOperation
;
import
org.apache.hadoop.hive.ql.session.SessionState
;
import
org.apache.hadoop.security.UserGroupInformation
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.testng.Assert
;
import
org.testng.annotations.BeforeClass
;
import
org.testng.annotations.Test
;
import
java.text.ParseException
;
...
...
@@ -60,17 +60,32 @@ import java.util.*;
import
static
org
.
apache
.
atlas
.
AtlasClient
.
NAME
;
import
static
org
.
apache
.
atlas
.
hive
.
hook
.
events
.
BaseHiveEvent
.*;
import
static
org
.
testng
.
Assert
.
assertEquals
;
import
static
org
.
testng
.
Assert
.
assertNotEquals
;
import
static
org
.
testng
.
Assert
.
assertNotNull
;
import
static
org
.
testng
.
Assert
.
assertTrue
;
import
static
org
.
testng
.
Assert
.
fail
;
import
static
org
.
testng
.
Assert
.*;
public
class
HiveHookIT
extends
HiveITBase
{
private
static
final
Logger
LOG
=
LoggerFactory
.
getLogger
(
HiveHookIT
.
class
);
private
static
final
String
PART_FILE
=
"2015-01-01"
;
private
Driver
driverWithNoHook
;
@BeforeClass
public
void
setUp
()
throws
Exception
{
// initialize 'driverWithNoHook' with HiveServer2 hook and HiveMetastore hook disabled
HiveConf
conf
=
new
HiveConf
();
conf
.
set
(
"hive.exec.post.hooks"
,
""
);
conf
.
set
(
"hive.metastore.event.listeners"
,
""
);
SessionState
ss
=
new
SessionState
(
conf
);
ss
=
SessionState
.
start
(
ss
);
SessionState
.
setCurrentSessionState
(
ss
);
// Initialize 'driverWithNoHook' with HS2 hook disabled and HMS hook disabled.
driverWithNoHook
=
new
Driver
(
conf
);
super
.
setUp
();
}
@Test
public
void
testCreateDatabase
()
throws
Exception
{
String
dbName
=
"db"
+
random
();
...
...
@@ -87,7 +102,7 @@ public class HiveHookIT extends HiveITBase {
//There should be just one entity per dbname
runCommand
(
"drop database "
+
dbName
);
assertD
B
IsNotRegistered
(
dbName
);
assertD
atabase
IsNotRegistered
(
dbName
);
runCommand
(
"create database "
+
dbName
);
dbId
=
assertDatabaseIsRegistered
(
dbName
);
...
...
@@ -1557,7 +1572,7 @@ public class HiveHookIT extends HiveITBase {
String
tableName
=
tableName
();
String
createCommand
=
"create table "
+
tableName
+
" (id int, name string)"
;
driverWith
outContext
.
run
(
createCommand
);
driverWith
NoHook
.
run
(
createCommand
);
assertTableIsNotRegistered
(
DEFAULT_DB
,
tableName
);
...
...
@@ -1802,7 +1817,7 @@ public class HiveHookIT extends HiveITBase {
assertTableIsNotRegistered
(
dbName
,
tableNames
[
i
]);
}
assertD
B
IsNotRegistered
(
dbName
);
assertD
atabase
IsNotRegistered
(
dbName
);
}
@Test
...
...
@@ -1849,14 +1864,14 @@ public class HiveHookIT extends HiveITBase {
//Test Deletion of a non existing DB
String
dbName
=
"nonexistingdb"
;
assertD
B
IsNotRegistered
(
dbName
);
assertD
atabase
IsNotRegistered
(
dbName
);
String
query
=
String
.
format
(
"drop database if exists %s cascade"
,
dbName
);
runCommand
(
query
);
//Should have no effect
assertD
B
IsNotRegistered
(
dbName
);
assertD
atabase
IsNotRegistered
(
dbName
);
}
@Test
...
...
@@ -2209,33 +2224,10 @@ public class HiveHookIT extends HiveITBase {
assertEntityIsNotRegistered
(
HiveDataTypes
.
HIVE_TABLE
.
getName
(),
ATTRIBUTE_QUALIFIED_NAME
,
tableQualifiedName
);
}
private
void
assertDBIsNotRegistered
(
String
dbName
)
throws
Exception
{
LOG
.
debug
(
"Searching for database {}"
,
dbName
);
String
dbQualifiedName
=
HiveMetaStoreBridge
.
getDBQualifiedName
(
CLUSTER_NAME
,
dbName
);
assertEntityIsNotRegistered
(
HiveDataTypes
.
HIVE_DB
.
getName
(),
ATTRIBUTE_QUALIFIED_NAME
,
dbQualifiedName
);
}
private
String
assertTableIsRegistered
(
String
dbName
,
String
tableName
,
AssertPredicate
assertPredicate
)
throws
Exception
{
return
assertTableIsRegistered
(
dbName
,
tableName
,
assertPredicate
,
false
);
}
private
void
assertEntityIsNotRegistered
(
final
String
typeName
,
final
String
property
,
final
String
value
)
throws
Exception
{
waitFor
(
80000
,
new
Predicate
()
{
@Override
public
void
evaluate
()
throws
Exception
{
try
{
atlasClientV2
.
getEntityByAttribute
(
typeName
,
Collections
.
singletonMap
(
property
,
value
));
}
catch
(
AtlasServiceException
e
)
{
if
(
e
.
getStatus
()
==
ClientResponse
.
Status
.
NOT_FOUND
)
{
return
;
}
}
fail
(
String
.
format
(
"Entity was not supposed to exist for typeName = %s, attributeName = %s, "
+
"attributeValue = %s"
,
typeName
,
property
,
value
));
}
});
}
@Test
public
void
testLineage
()
throws
Exception
{
String
table1
=
createTable
(
false
);
...
...
@@ -2267,10 +2259,6 @@ public class HiveHookIT extends HiveITBase {
runCommand
(
"show transactions"
);
}
private
String
dbName
()
{
return
"db"
+
random
();
}
private
String
createDatabase
()
throws
Exception
{
String
dbName
=
dbName
();
...
...
This diff is collapsed.
Click to expand it.
addons/hive-bridge/src/test/java/org/apache/atlas/hive/hook/HiveMetastoreHookIT.java
0 → 100755
View file @
c37656cc
This diff is collapsed.
Click to expand it.
addons/hive-bridge/src/test/resources/hive-site.xml
View file @
c37656cc
...
...
@@ -37,6 +37,11 @@
</property>
<property>
<name>
hive.metastore.event.listeners
</name>
<value>
org.apache.atlas.hive.hook.HiveMetastoreHookImpl
</value>
</property>
<property>
<name>
hive.support.concurrency
</name>
<value>
false
</value>
</property>
...
...
This diff is collapsed.
Click to expand it.
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