Skip to content

Commit

Permalink
feat: support zk registry to config acl (#52)
Browse files Browse the repository at this point in the history
  • Loading branch information
gxcsoccer committed Jun 19, 2019
1 parent 188f137 commit 0ba7c9f
Show file tree
Hide file tree
Showing 3 changed files with 125 additions and 3 deletions.
7 changes: 5 additions & 2 deletions lib/registry/zk/data_client.js
Expand Up @@ -32,15 +32,18 @@ class ZookeeperRegistry extends Base {
address = options.address;
this._rootPath = '/sofa-rpc/';
}
const cluster = options.cluster;
this._zkClient = this.options.zookeeper.createClient(address, { cluster });
const { cluster, authInfo } = options;
this._zkClient = this.options.zookeeper.createClient(address, { cluster, authInfo });
this._zkClient.on('connected', () => {
this.emit('connected');
this._reRegister();
});
this._zkClient.on('disconnected', () => {
this.emit('disconnected');
});
this._zkClient.on('error', err => {
this.emit('error', err);
});
this._subscribeMap = new Map(); // <interfaceName, addressList>
this._registerMap = new Map();
}
Expand Down
3 changes: 2 additions & 1 deletion package.json
Expand Up @@ -47,7 +47,7 @@
"sofa-bolt-node": "^1.1.1",
"urlencode": "^1.1.0",
"utility": "^1.16.1",
"zookeeper-cluster-client": "^3.0.0"
"zookeeper-cluster-client": "^3.1.0"
},
"devDependencies": {
"antpb": "^1.0.0",
Expand All @@ -59,6 +59,7 @@
"eslint": "^5.16.0",
"eslint-config-egg": "^7.4.1",
"mm": "^2.5.0",
"node-zookeeper-client": "^1.0.0",
"pedding": "^1.1.0"
},
"engines": {
Expand Down
118 changes: 118 additions & 0 deletions test/registry/acl.test.js
@@ -0,0 +1,118 @@
'use strict';

const mm = require('mm');
const assert = require('assert');
const zookeeper = require('zookeeper-cluster-client');
const { ACL, Permission, Id } = require('node-zookeeper-client');
const ZookeeperRegistry = require('../../lib/registry/zk/data_client');

const logger = console;

describe('test/registry/acl.test.js', () => {
let registry;
let client;
before(async function() {
client = zookeeper.createClient('localhost:2181', {
authInfo: {
scheme: 'digest',
auth: 'gxcsoccer:123456',
},
});

await client.mkdirp('/acl');
await client.setACL('/acl', [
new ACL(
Permission.ALL,
new Id('auth', 'gxcsoccer:123456')
),
], -1);

registry = new ZookeeperRegistry({
logger,
address: 'localhost:2181/acl/sofa-rpc',
authInfo: {
scheme: 'digest',
auth: 'gxcsoccer:123456',
},
});
await registry.ready();
});
after(async function() {
await client.close();
await registry.close();
});
afterEach(() => {
mm.restore();
});

it('should subscribe & publish ok', async () => {
registry.subscribe({
interfaceName: 'com.alipay.sofa.rpc.test.HelloService',
}, val => {
registry.emit('address_update', val);
});

let addressList = await registry.await('address_update');
assert(addressList && addressList.length === 0);

registry.register({
interfaceName: 'com.alipay.sofa.rpc.test.HelloService',
url: 'bolt://127.0.0.1:12200',
});

addressList = await registry.await('address_update');
assert(addressList && addressList.length === 1);
assert(addressList[0] === 'bolt://127.0.0.1:12200');

registry.register({
interfaceName: 'com.alipay.sofa.rpc.test.HelloService',
url: 'bolt://127.0.0.2:12200',
});

addressList = await registry.await('address_update');
assert(addressList && addressList.length === 2);
assert(addressList.some(addr => addr === 'bolt://127.0.0.1:12200'));
assert(addressList.some(addr => addr === 'bolt://127.0.0.2:12200'));

registry.unRegister({
interfaceName: 'com.alipay.sofa.rpc.test.HelloService',
url: 'bolt://127.0.0.1:12200',
});

addressList = await registry.await('address_update');
assert(addressList && addressList.length === 1);
assert(addressList[0] === 'bolt://127.0.0.2:12200');

registry.unRegister({
interfaceName: 'com.alipay.sofa.rpc.test.HelloService',
url: 'bolt://127.0.0.2:12200',
});

addressList = await registry.await('address_update');
assert(addressList && addressList.length === 0);
});

it('should not subscribe ok without authInfo', async () => {
const registry = new ZookeeperRegistry({
logger,
address: '127.0.0.1:2181/acl/sofa-rpc',
});
await registry.ready();

registry.subscribe({
interfaceName: 'com.alipay.sofa.rpc.test.HelloService',
}, val => {
registry.emit('address_update', val);
});

try {
await registry.await('error');
} catch (err) {
console.log(err);
assert(err.name === 'NO_AUTH');
assert(err.code === -102);
}

await registry.close();
});
});

0 comments on commit 0ba7c9f

Please sign in to comment.