Skip to content

Commit dfc8a6b

Browse files
authored
add unittest for pam auth (#52)
* add unittest for pam auth * rename to offical repo
1 parent abe07b6 commit dfc8a6b

File tree

4 files changed

+49
-16
lines changed

4 files changed

+49
-16
lines changed

.travis.yml

+1
Original file line numberDiff line numberDiff line change
@@ -27,3 +27,4 @@ script:
2727
# other one that changes the source code to be CI'ed with the
2828
# updated Docker image.
2929
- docker run --rm -v $GOPATH:/go -w /go/src/github.com/sql-machine-learning/gohive sqlflow/gohive:dev bash test.sh
30+
- docker run -e WITH_HS2_PAM_AUTH=ON --rm -v $GOPATH:/go -w /go/src/github.com/sql-machine-learning/gohive sqlflow/gohive:dev bash test.sh

docker/Dockerfile

+8
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ ENV HIVE_SITE_CONF_datanucleus_autoCreateSchema=false
3535
#ENV HIVE_SITE_CONF_hive_metastore_uris=thrift://hive-metastore:9083
3636
ENV HIVE_SITE_CONF_hive_server2_transport_mode=binary
3737
#ENV HIVE_SITE_CONF_hive_server2_use_SSL=false
38+
# Note: only the default authentication, may be replaced by WITH_HS2_PAM_AUTH=ON in entrypoint.sh.
3839
ENV HIVE_SITE_CONF_hive_server2_authentication=NOSASL
3940
ENV HIVE_SITE_CONF_hive_server2_enable_doAs=false
4041
ENV HIVE_SITE_CONF_hive_metastore_schema_verification=false
@@ -67,6 +68,13 @@ ENV YARN_CONF_yarn_resourcemanager_resource__tracker_address=resourcemanager:803
6768
COPY entrypoint.sh /entrypoint.sh
6869
RUN chmod a+x /entrypoint.sh
6970

71+
# install JPam for PAM authentication
72+
RUN wget https://jaist.dl.sourceforge.net/project/jpam/jpam/jpam-1.1/JPam-Linux_amd64-1.1.tgz && \
73+
tar zxf JPam-Linux_amd64-1.1.tgz && \
74+
cp JPam-1.1/libjpam.so /opt/hadoop-3.2.0/lib/native && \
75+
rm -rf JPam-Linux_amd64-1.1.tgz
76+
RUN useradd sqlflow && echo 'sqlflow:sqlflow' | chpasswd
77+
7078
ENTRYPOINT ["/entrypoint.sh"]
7179

7280
RUN mkdir /cmd

docker/entrypoint.sh

+5
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,11 @@ function configure() {
3131
done
3232
}
3333

34+
if [ "${WITH_HS2_PAM_AUTH:-OFF}" = "ON" ]; then
35+
export HIVE_SITE_CONF_hive_server2_authentication=PAM
36+
export HIVE_SITE_CONF_hive_server2_authentication_pam_services=login,sshd
37+
fi
38+
3439
configure /etc/hadoop/core-site.xml core CORE_CONF
3540
configure /etc/hadoop/hdfs-site.xml hdfs HDFS_CONF
3641
configure /etc/hadoop/yarn-site.xml yarn YARN_CONF

driver_test.go

+35-16
Original file line numberDiff line numberDiff line change
@@ -2,30 +2,49 @@ package gohive
22

33
import (
44
"database/sql"
5+
"fmt"
6+
"os"
57
"reflect"
68
"testing"
79

810
"github.com/stretchr/testify/assert"
911
)
1012

13+
var username = "sqlflow"
14+
var password = "sqlflow"
15+
16+
func newDB(dbName string) (*sql.DB, error) {
17+
connStr := "127.0.0.1:10000"
18+
pamAuth := os.Getenv("WITH_HS2_PAM_AUTH")
19+
if dbName != "" {
20+
connStr = fmt.Sprintf("%s/%s", connStr, dbName)
21+
}
22+
if pamAuth == "ON" {
23+
connStr = fmt.Sprintf("%s:%s@%s?auth=PLAIN", username, password, connStr)
24+
}
25+
return sql.Open("hive", connStr)
26+
}
27+
1128
func TestOpenConnection(t *testing.T) {
12-
db, err := sql.Open("hive", "127.0.0.1:10000")
29+
db, err := newDB("")
1330
assert.Nil(t, err)
1431
defer db.Close()
1532
}
1633

1734
func TestOpenConnectionAgainstAuth(t *testing.T) {
18-
db, _ := sql.Open("hive", "127.0.0.1:10000/churn?auth=PLAIN")
19-
rows, err := db.Query("SELECT customerID, gender FROM train")
20-
assert.EqualError(t, err, "Bad SASL negotiation status: 4 ()")
21-
defer db.Close()
22-
if err == nil {
23-
defer rows.Close()
35+
if os.Getenv("WITH_HS2_PAM_AUTH") != "ON" {
36+
db, _ := sql.Open("hive", "127.0.0.1:10000/churn?auth=PLAIN")
37+
rows, err := db.Query("SELECT customerID, gender FROM train")
38+
assert.EqualError(t, err, "Bad SASL negotiation status: 4 ()")
39+
defer db.Close()
40+
if err == nil {
41+
defer rows.Close()
42+
}
2443
}
2544
}
2645

2746
func TestQuery(t *testing.T) {
28-
db, _ := sql.Open("hive", "127.0.0.1:10000/churn")
47+
db, _ := newDB("churn")
2948
rows, err := db.Query("SELECT customerID, gender FROM train")
3049
assert.Nil(t, err)
3150
defer db.Close()
@@ -45,7 +64,7 @@ func TestQuery(t *testing.T) {
4564

4665
func TestColumnName(t *testing.T) {
4766
a := assert.New(t)
48-
db, _ := sql.Open("hive", "127.0.0.1:10000/churn")
67+
db, _ := newDB("churn")
4968
rows, err := db.Query("SELECT customerID, gender FROM train;")
5069
assert.Nil(t, err)
5170
defer db.Close()
@@ -58,7 +77,7 @@ func TestColumnName(t *testing.T) {
5877

5978
func TestColumnTypeName(t *testing.T) {
6079
a := assert.New(t)
61-
db, _ := sql.Open("hive", "127.0.0.1:10000/churn")
80+
db, _ := newDB("churn")
6281
rows, err := db.Query("SELECT customerID, gender FROM train")
6382
assert.Nil(t, err)
6483
defer db.Close()
@@ -73,7 +92,7 @@ func TestColumnTypeName(t *testing.T) {
7392

7493
func TestColumnType(t *testing.T) {
7594
a := assert.New(t)
76-
db, _ := sql.Open("hive", "127.0.0.1:10000/churn")
95+
db, _ := newDB("churn")
7796
rows, err := db.Query("SELECT customerID, gender FROM train")
7897

7998
defer db.Close()
@@ -88,7 +107,7 @@ func TestColumnType(t *testing.T) {
88107

89108
func TestShowCreateTable(t *testing.T) {
90109
a := assert.New(t)
91-
db, _ := sql.Open("hive", "127.0.0.1:10000/churn")
110+
db, _ := newDB("churn")
92111
rows, err := db.Query("show create table train")
93112

94113
defer db.Close()
@@ -103,7 +122,7 @@ func TestShowCreateTable(t *testing.T) {
103122

104123
func TestDescribeTable(t *testing.T) {
105124
a := assert.New(t)
106-
db, _ := sql.Open("hive", "127.0.0.1:10000/churn")
125+
db, _ := newDB("churn")
107126
rows, err := db.Query("describe train")
108127

109128
defer db.Close()
@@ -118,7 +137,7 @@ func TestDescribeTable(t *testing.T) {
118137

119138
func TestShowDatabases(t *testing.T) {
120139
a := assert.New(t)
121-
db, _ := sql.Open("hive", "127.0.0.1:10000")
140+
db, _ := newDB("")
122141
rows, err := db.Query("show databases")
123142

124143
defer db.Close()
@@ -132,14 +151,14 @@ func TestShowDatabases(t *testing.T) {
132151
}
133152

134153
func TestPing(t *testing.T) {
135-
db, _ := sql.Open("hive", "127.0.0.1:10000/churn")
154+
db, _ := newDB("churn")
136155
err := db.Ping()
137156
assert.Nil(t, err)
138157
}
139158

140159
func TestExec(t *testing.T) {
141160
a := assert.New(t)
142-
db, _ := sql.Open("hive", "127.0.0.1:10000/churn")
161+
db, _ := newDB("churn")
143162
_, err := db.Exec("insert into churn.test (gender) values ('Female')")
144163
defer db.Close()
145164
a.NoError(err)

0 commit comments

Comments
 (0)