(frame: SentinelFramework)
| 718 | }); |
| 719 | |
| 720 | async function steadyState(frame: SentinelFramework) { |
| 721 | // wait a bit to ensure that sentinels are seeing eachother |
| 722 | await setTimeout(2000) |
| 723 | let checkedMaster = false; |
| 724 | let checkedReplicas = false; |
| 725 | while (!checkedMaster || !checkedReplicas) { |
| 726 | if (!checkedMaster) { |
| 727 | const master = await frame.sentinelMaster(); |
| 728 | if (master?.flags === 'master') { |
| 729 | checkedMaster = true; |
| 730 | } |
| 731 | } |
| 732 | if (!checkedReplicas) { |
| 733 | const replicas = (await frame.sentinelReplicas()); |
| 734 | checkedReplicas = true; |
| 735 | for (const replica of replicas!) { |
| 736 | checkedReplicas &&= (replica.flags === 'slave'); |
| 737 | } |
| 738 | } |
| 739 | } |
| 740 | let nodeResolve; |
| 741 | const nodePromise = new Promise(res => { |
| 742 | nodeResolve = res; |
| 743 | }) |
| 744 | const seenNodes = new Set<number>(); |
| 745 | let sentinel: RedisSentinelType<RedisModules, RedisFunctions, RedisScripts, RespVersions, TypeMapping> | undefined; |
| 746 | const tracer = []; |
| 747 | try { |
| 748 | sentinel = frame.getSentinelClient({ replicaPoolSize: 1, scanInterval: 2000 }, false) |
| 749 | .on('topology-change', (event: RedisSentinelEvent) => { |
| 750 | if (event.type == "MASTER_CHANGE" || event.type == "REPLICA_ADD") { |
| 751 | seenNodes.add(event.node.port); |
| 752 | if (seenNodes.size == frame.getAllNodesPort().length) { |
| 753 | nodeResolve(); |
| 754 | } |
| 755 | } |
| 756 | }).on('error', () => { }); |
| 757 | sentinel.setTracer(tracer); |
| 758 | await sentinel.connect(); |
| 759 | await nodePromise; |
| 760 | |
| 761 | await sentinel.flushAll(); |
| 762 | } finally { |
| 763 | if (sentinel !== undefined) { |
| 764 | sentinel.destroy(); |
| 765 | } |
| 766 | } |
| 767 | } |
| 768 | |
| 769 | describe('legacy tests', () => { |
| 770 | const config: RedisSentinelConfig = { sentinelName: "test", numberOfNodes: 3, password: undefined }; |
no test coverage detected