bbqpool-stratum
Version:
High performance Stratum poolserver in Node.js. Optimized to build with GCC 10 and O3 / bugfixes
141 lines (126 loc) • 4.3 kB
JavaScript
/*
*
* Difficulty (Updated)
*
*/
const events = require('events');
const Difficulty = require('../main/difficulty');
// Bad Settings
const port = 3001;
const vardiff1 = {
'minimum': 8,
'maximum': 8,
'targetTime': 1,
'retargetTime': 1,
'variance': -0.001,
};
const vardiff2 = {
'minimum': 8,
'maximum': 8,
'targetTime': 1,
'retargetTime': 1,
'variance': -0.001,
'x2mode': true,
};
////////////////////////////////////////////////////////////////////////////////
describe('Test difficulty functionality', () => {
let client;
beforeEach(() => {
client = new events.EventEmitter();
client.lastActivity = Date.now();
client.difficulty = 8;
client.socket = { localPort: port };
});
let difficulty1, difficulty2;
beforeEach(() => {
difficulty1 = new Difficulty(port, vardiff1);
difficulty2 = new Difficulty(port, vardiff2);
});
test('Test difficulty error handling', () => {
const consoleSpy = jest.spyOn(console, 'error').mockImplementation(() => {});
client.socket.localPort = 3002;
difficulty1.manageClient(client);
difficulty2.manageClient(client);
expect(consoleSpy).toHaveBeenCalledWith('Handling a client which is not of this vardiff?');
console.error.mockClear();
});
test('Test client difficulty management [1]', () => {
const consoleSpy = jest.spyOn(console, 'log').mockImplementation(() => {});
difficulty1.manageClient(client);
difficulty2.manageClient(client);
client.emit('submit');
expect(consoleSpy).toHaveBeenCalledWith('Setting difficulty on client initialization');
console.log.mockClear();
});
test('Test client difficulty management [2]', () => {
const consoleSpy = jest.spyOn(console, 'log').mockImplementation(() => {});
difficulty1.manageClient(client);
difficulty2.manageClient(client);
client.emit('submit');
client.emit('submit');
expect(consoleSpy).toHaveBeenCalledWith('No difficulty update required');
console.log.mockClear();
});
test('Test client difficulty management [3]', () => {
const consoleSpy = jest.spyOn(console, 'log').mockImplementation(() => {});
difficulty1.manageClient(client);
difficulty2.manageClient(client);
client.emit('submit');
for (let step = 0; step < 5; step += 1) {
client.emit('submit');
expect(consoleSpy).toHaveBeenCalledWith('No difficulty update required');
console.log.mockClear();
}
});
test('Test client difficulty management [4]', (done) => {
const consoleSpy = jest.spyOn(console, 'log').mockImplementation(() => {});
difficulty1.manageClient(client);
difficulty2.manageClient(client);
client.emit('submit');
setTimeout(() => {
client.emit('submit');
expect(consoleSpy).toHaveBeenCalledWith('No difficulty update required');
console.log.mockClear();
done();
}, 2000);
});
test('Test client difficulty management [5]', (done) => {
const consoleSpy = jest.spyOn(console, 'log').mockImplementation(() => {});
client.difficulty = 6;
difficulty1.manageClient(client);
difficulty2.manageClient(client);
client.emit('submit');
setTimeout(() => {
client.emit('submit');
expect(consoleSpy).toHaveBeenCalledWith('Increasing current difficulty');
console.log.mockClear();
done();
}, 1000);
});
test('Test client difficulty management [6]', (done) => {
const consoleSpy = jest.spyOn(console, 'log').mockImplementation(() => {});
client.difficulty = 10;
difficulty1.manageClient(client);
difficulty2.manageClient(client);
client.emit('submit');
setTimeout(() => {
client.emit('submit');
expect(consoleSpy).toHaveBeenCalledWith('Decreasing current difficulty');
console.log.mockClear();
done();
}, 2000);
});
test('Test client difficulty management [7]', (done) => {
const consoleSpy = jest.spyOn(console, 'log').mockImplementation(() => {});
client.difficulty = 16;
difficulty1.manageClient(client);
difficulty2.manageClient(client);
client.emit('submit');
setTimeout(() => {
client.emit('submit');
expect(consoleSpy).toHaveBeenCalledWith('Decreasing current difficulty');
console.log.mockClear();
done();
}, 2000);
});
});