async def test_lifted_unknown(self): fut = asyncio.Future() fut.set_result(UNKNOWN) out = Output.from_input({ "foo": "foo", "bar": UNKNOWN, "baz": fut}) self.assertFalse(await out.is_known()) r1 = out["foo"] self.assertTrue(await r1.is_known()) self.assertEqual(await r1.future(), "foo") r2 = out["bar"] self.assertFalse(await r2.is_known()) self.assertEqual(await r2.future(), UNKNOWN) r3 = out["baz"] self.assertFalse(await r3.is_known()) self.assertEqual(await r3.future(), UNKNOWN) r4 = out["baz"]["qux"] self.assertFalse(await r4.is_known()) self.assertEqual(await r4.future(), UNKNOWN) out = Output.from_input([ "foo", UNKNOWN ]) r5 = out[0] self.assertTrue(await r5.is_known()) self.assertEqual(await r5.future(), "foo") r6 = out[1] self.assertFalse(await r6.is_known()) self.assertEqual(await r6.future(), UNKNOWN)
async def test_output_all(self): res = FakeCustomResource("some-resource") fut = asyncio.Future() fut.set_result(42) known_fut = asyncio.Future() known_fut.set_result(True) out = Output({res}, fut, known_fut) other = Output.from_input(99) combined = Output.all(out, other) deps = [] prop = await rpc.serialize_property(combined, deps) self.assertListEqual(deps, [res]) self.assertEqual([42, 99], prop)
async def test_lifted_unknown(self): settings.SETTINGS.dry_run = True fut = asyncio.Future() fut.set_result(UNKNOWN) out = Output.from_input({"foo": "foo", "bar": UNKNOWN, "baz": fut}) self.assertFalse(await out.is_known()) r1 = out["foo"] self.assertTrue(await r1.is_known()) self.assertEqual(await r1.future(with_unknowns=True), "foo") r2 = out["bar"] self.assertFalse(await r2.is_known()) self.assertEqual(await r2.future(with_unknowns=True), UNKNOWN) r3 = out["baz"] self.assertFalse(await r3.is_known()) self.assertEqual(await r3.future(with_unknowns=True), UNKNOWN) r4 = out["baz"]["qux"] self.assertFalse(await r4.is_known()) self.assertEqual(await r4.future(with_unknowns=True), UNKNOWN) out = Output.from_input(["foo", UNKNOWN]) r5 = out[0] self.assertTrue(await r5.is_known()) self.assertEqual(await r5.future(with_unknowns=True), "foo") r6 = out[1] self.assertFalse(await r6.is_known()) self.assertEqual(await r6.future(with_unknowns=True), UNKNOWN) out = Output.all( Output.from_input("foo"), Output.from_input(UNKNOWN), Output.from_input( [Output.from_input(UNKNOWN), Output.from_input("bar")])) self.assertFalse(await out.is_known()) r7 = out[0] self.assertTrue(await r7.is_known()) self.assertEqual(await r7.future(with_unknowns=True), "foo") r8 = out[1] self.assertFalse(await r8.is_known()) self.assertEqual(await r8.future(with_unknowns=True), UNKNOWN) r9 = out[2] self.assertFalse(await r9.is_known()) r10 = r9[0] self.assertFalse(await r10.is_known()) self.assertEqual(await r10.future(with_unknowns=True), UNKNOWN) r11 = r9[1] self.assertTrue(await r11.is_known()) self.assertEqual(await r11.future(with_unknowns=True), "bar")