diff --git a/redlock/redlock-tests.ts b/redlock/redlock-tests.ts index 8c05f6441e..309f687fbb 100644 --- a/redlock/redlock-tests.ts +++ b/redlock/redlock-tests.ts @@ -1,103 +1,49 @@ /// -import Redlock = require('redlock'); +import * as Redlock from 'redlock'; +import * as Promise from 'bluebird'; +import {RedisClient} from 'redis'; -import NodeifyCallback = RedlockTypes.NodeifyCallback; -import Lock = RedlockTypes.Lock; -import RedlockOptions = RedlockTypes.RedlockOptions; +import Lock = Redlock.Lock; namespace RedlockTest { - // constructor - { - let redlock: Redlock; - let client: any; - let options: RedlockOptions; - redlock = new Redlock([client]); - redlock = new Redlock([client], options); - } + + let redlock: Redlock; + let client: RedisClient; + let lock: Lock; + + redlock = new Redlock([client]); + redlock = new Redlock([client], { + driftFactor: 0.1, + retryCount: 2, + retryDelay: 3 + }); + + redlock.acquire('resource', 30).then((lock: Lock) => {}); + redlock.acquire('resource', 30, (err: any, lock: Lock) => {}); + redlock.lock('resource', 30).then((lock: Lock) => {}); + redlock.lock('resource', 30, (err: any, lock: Lock) => {}); - // acquire, lock - { - let redlock: Redlock; - let resource: string; - let ttl: number; - let callback: NodeifyCallback; - let result: Promise; - result = redlock.acquire(resource, ttl); - result = redlock.acquire(resource, ttl, callback); - result = redlock.lock(resource, ttl); - result = redlock.lock(resource, ttl, callback); - } + // There is currently no way to test the disposer as the bluebird typings does not + // expose the .using method. + // promise.using(redlock.disposer('resource', 30), (lock: Lock) => {}); + + redlock.release(lock); + redlock.release(lock, (err: any) => {}); + redlock.unlock(lock); + redlock.unlock(lock, (err: any) => {}); - // disposer - { - let redlock: Redlock; - let resource: string; - let ttl: number; - let result: any; - result = redlock.acquire(resource, ttl); - } - - // release, unlock - { - let redlock: Redlock; - let lock: Lock; - let callback: NodeifyCallback; - let result: Promise; - result = redlock.release(lock); - result = redlock.release(lock, callback); - result = redlock.unlock(lock); - result = redlock.unlock(lock, callback); - } - - // extend - { - let redlock: Redlock; - let lock: Lock; - let ttl: number; - let callback: NodeifyCallback; - let result: Promise; - result = redlock.extend(lock, ttl); - result = redlock.extend(lock, ttl, callback); - } - - // _lock - { - let redlock: Redlock; - let resource: string; - let value: string; - let ttl: number; - let callback: NodeifyCallback; - let result: Promise; - result = redlock._lock(resource, value, ttl); - result = redlock._lock(resource, value, ttl, callback); - } - - // _random - { - let redlock: Redlock; - let result: string; - result = redlock._random(); - } + redlock.extend(lock, 30).then((lock: Lock) => {}); + redlock.extend(lock, 30, (err: any, lock: Lock) => {}); } namespace LockTest { - // unlock - { - let lock: Lock; - let callback: NodeifyCallback; - let result: Promise; - result = lock.unlock(); - result = lock.unlock(callback); - } - - // extend - { - let lock: Lock; - let ttl: number; - let callback: NodeifyCallback; - let result: Promise; - result = lock.extend(ttl); - result = lock.extend(ttl, callback); - } + + let lock: Lock; + + lock.unlock(); + lock.unlock((err) => {}); + + lock.extend(30).then((lock: Lock) => {}); + lock.extend(30, (err: any, lock: Lock) => {}); } diff --git a/redlock/redlock.d.ts b/redlock/redlock.d.ts index 6db97b9f9e..94ee8f3c7a 100644 --- a/redlock/redlock.d.ts +++ b/redlock/redlock.d.ts @@ -4,59 +4,61 @@ // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped /// +/// -declare namespace RedlockTypes { - interface LockError extends Error {} - interface NodeifyCallback { - (err: any, value?: T): void; +declare module "redlock" { + + import * as redis from 'redis'; + import * as Promise from 'bluebird'; + + namespace Redlock { + + interface Callback { + (err: any, value?: T): void; + } + + interface Lock { + + redlock: Redlock; + resource: string; + value: any; + expiration: number; + + unlock(callback?: Callback): Promise; + + extend(ttl: number, callback?: Callback): Promise; + } + + interface Options { + driftFactor?: number; + retryCount?: number; + retryDelay?: number; + } + + interface LockError extends Error {} } - - interface Lock { - redlock: Redlock; - resource: string; - value: any; - expiration: number; - - unlock(callback?: NodeifyCallback): Promise; - - extend(ttl: number, callback?: NodeifyCallback): Promise; - } - - interface RedlockOptions { - driftFactor?: number; - retryCount?: number; - retryDelay?: number; - } - + class Redlock { - LockError: LockError; driftFactor: number; retryCount: number; retryDelay: number; - servers: any[]; // array of redis.RedisClient + servers: redis.RedisClient[]; - constructor(clients: any[], options?: RedlockOptions); + constructor(clients: any[], options?: Redlock.Options); - acquire(resource: string, ttl: number, callback?: NodeifyCallback): Promise; - lock(resource: string, ttl: number, callback?: NodeifyCallback): Promise; + acquire(resource: string, ttl: number, callback?: Redlock.Callback): Promise; + lock(resource: string, ttl: number, callback?: Redlock.Callback): Promise; - disposer(resource: string, ttl: number): any; // return bluebird.Disposer + disposer(resource: string, ttl: number, errorHandler?: Redlock.Callback): any; // bluebird Disposer - release(lock: Lock, callback?: NodeifyCallback): Promise; - unlock(lock: Lock, callback?: NodeifyCallback): Promise; + release(lock: Redlock.Lock, callback?: Redlock.Callback): Promise; + unlock(lock: Redlock.Lock, callback?: Redlock.Callback): Promise; - extend(lock: Lock, ttl: number, callback?: NodeifyCallback): Promise; - - _lock(resource: string, value: string, ttl: number, callback?: NodeifyCallback): Promise; - - _random(): string; + extend(lock: Redlock.Lock, ttl: number, callback?: Redlock.Callback): Promise; } -} - -declare module "redlock" { - import Redlock = RedlockTypes.Redlock; + export = Redlock; }