File size: 2,990 Bytes
5c2ed06
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
'use strict';

const assert = require('assert').strict;

const { makeUser } = require('../users-utils');

describe('Simulator abstraction layer features', () => {
	describe('Battle', () => {
		let p1, p2, room;
		afterEach(() => {
			if (p1) {
				p1.disconnectAll();
				p1.destroy();
			}
			if (p2) {
				p2.disconnectAll();
				p2.destroy();
			}
			if (room) room.destroy();
		});

		it('should not get players out of sync in rated battles on rename', () => {
			// Regression test for 47263c8749
			const packedTeam = 'Weavile||lifeorb||swordsdance,knockoff,iceshard,iciclecrash|Jolly|,252,,,4,252|||||';
			p1 = makeUser("MissingNo.");
			p2 = makeUser();
			room = Rooms.createBattle({
				format: '',
				players: [{ user: p1, team: packedTeam }, { user: p2, team: packedTeam }],
				allowRenames: false,
			});
			assert(room.battle);
			p1.resetName();
			for (const player of room.battle.players) {
				assert.equal(player, room.battle.playerTable[toID(player.name)]);
			}
		});
	});

	describe('BattleStream', () => {
		it('should work (slow)', async () => {
			Config.simulatorprocesses = 1;
			const PM = require('../../dist/server/room-battle').PM;
			assert.equal(PM.processes.length, 0);
			PM.spawn(1, true);
			assert.equal(PM.processes[0].getLoad(), 0);

			const stream = PM.createStream();
			assert.equal(PM.processes[0].getLoad(), 1);
			stream.write(
				'>version a2393dfd2a2da5594148bf99eea514e72b136c2c\n' +
				'>start {"formatid":"gen8randombattle","seed":[9619,36790,28450,62465],"rated":"Rated battle"}\n' +
				'>player p1 {"name":"p1","avatar":"ethan","team":"","rating":1507,"seed":[59512,58581,51338,7861]}\n' +
				'>player p2 {"name":"p2","avatar":"dawn","team":"","rating":1447,"seed":[33758,53485,62378,29757]}\n'
			);
			assert((await stream.read()).startsWith('sideupdate\np1\n|request|'));
			assert((await stream.read()).startsWith('sideupdate\np2\n|request|'));
			assert((await stream.read()).includes('|switch|'));
			stream.write(
				'>p1 move 1\n' +
				'>p2 move 1\n'
			);
			assert((await stream.read()).startsWith('sideupdate\np1\n|request|'));
			assert((await stream.read()).startsWith('sideupdate\np2\n|request|'));
			assert((await stream.read()).includes('|move|'));
			stream.destroy();
			assert.equal(PM.processes[0].getLoad(), 0);

			const stream2 = PM.createStream();
			assert.equal(PM.processes[0].getLoad(), 1);
			stream2.write(
				'>version a2393dfd2a2da5594148bf99eea514e72b136c2c\n' +
				'>start {"formatid":"gen8randombattle","seed":[9619,36790,28450,62465],"rated":"Rated battle"}\n' +
				'>player p1 {"name":"p1","avatar":"ethan","team":"","rating":1507,"seed":[59512,58581,51338,7861]}\n' +
				'>player p2 {"name":"p2","avatar":"dawn","team":"","rating":1447,"seed":[33758,53485,62378,29757]}\n' +
				'>p1 move 1\n' +
				'>p2 move 1\n'
			);
			assert(await stream2.read());
			stream2.writeEnd();
			await stream2.readAll();
			assert.equal(PM.processes[0].getLoad(), 0);
			PM.unspawn();
		});
	});
});