Github user andrewor14 commented on a diff in the pull request:

    https://github.com/apache/spark/pull/4960#discussion_r33735212
  
    --- Diff: 
core/src/test/scala/org/apache/spark/scheduler/cluster/mesos/MesosSchedulerBackendSuite.scala
 ---
    @@ -169,4 +179,97 @@ class MesosSchedulerBackendSuite extends FunSuite with 
LocalSparkContext with Mo
         backend.resourceOffers(driver, mesosOffers2)
         verify(driver, times(1)).declineOffer(mesosOffers2.get(0).getId)
       }
    +
    +  test("can handle multiple roles") {
    +    val driver = mock[SchedulerDriver]
    +    val taskScheduler = mock[TaskSchedulerImpl]
    +
    +    val listenerBus = mock[LiveListenerBus]
    +    listenerBus.post(
    +      SparkListenerExecutorAdded(anyLong, "s1", new ExecutorInfo("host1", 
2, Map.empty)))
    +
    +    val sc = mock[SparkContext]
    +    when(sc.executorMemory).thenReturn(100)
    +    when(sc.getSparkHome()).thenReturn(Option("/path"))
    +    when(sc.executorEnvs).thenReturn(new mutable.HashMap[String, String])
    +    when(sc.conf).thenReturn(new SparkConf)
    +    when(sc.listenerBus).thenReturn(listenerBus)
    +
    +    val id = 1
    +    val builder = Offer.newBuilder()
    +    builder.addResourcesBuilder()
    +      .setName("mem")
    +      .setType(Value.Type.SCALAR)
    +      .setRole("prod")
    +      .setScalar(Scalar.newBuilder().setValue(500))
    +    builder.addResourcesBuilder()
    +      .setName("cpus")
    +      .setRole("prod")
    +      .setType(Value.Type.SCALAR)
    +      .setScalar(Scalar.newBuilder().setValue(1))
    +    builder.addResourcesBuilder()
    +      .setName("mem")
    +      .setRole("dev")
    +      .setType(Value.Type.SCALAR)
    +      .setScalar(Scalar.newBuilder().setValue(600))
    +    builder.addResourcesBuilder()
    +      .setName("cpus")
    +      .setRole("dev")
    +      .setType(Value.Type.SCALAR)
    +      .setScalar(Scalar.newBuilder().setValue(2))
    +    val offer = 
builder.setId(OfferID.newBuilder().setValue(s"o${id.toString}").build())
    +      .setFrameworkId(FrameworkID.newBuilder().setValue("f1"))
    +      .setSlaveId(SlaveID.newBuilder().setValue(s"s${id.toString}"))
    +      .setHostname(s"host${id.toString}").build()
    +
    +
    +    val mesosOffers = new java.util.ArrayList[Offer]
    +    mesosOffers.add(offer)
    +
    +    val backend = new MesosSchedulerBackend(taskScheduler, sc, "master")
    +
    +    val expectedWorkerOffers = new ArrayBuffer[WorkerOffer](1)
    +    expectedWorkerOffers.append(new WorkerOffer(
    +      mesosOffers.get(0).getSlaveId.getValue,
    +      mesosOffers.get(0).getHostname,
    +      2 // Deducting 1 for executor
    +    ))
    +
    +    val taskDesc = new TaskDescription(1L, 0, "s1", "n1", 0, 
ByteBuffer.wrap(new Array[Byte](0)))
    +    
when(taskScheduler.resourceOffers(expectedWorkerOffers)).thenReturn(Seq(Seq(taskDesc)))
    +    when(taskScheduler.CPUS_PER_TASK).thenReturn(1)
    +
    +    val capture = 
ArgumentCaptor.forClass(classOf[util.Collection[TaskInfo]])
    +    when(
    +      driver.launchTasks(
    +        Matchers.eq(Collections.singleton(mesosOffers.get(0).getId)),
    +        capture.capture(),
    +        any(classOf[Filters])
    +      )
    +    ).thenReturn(Status.valueOf(1))
    +
    +    backend.resourceOffers(driver, mesosOffers)
    +
    +    verify(driver, times(1)).launchTasks(
    +      Matchers.eq(Collections.singleton(mesosOffers.get(0).getId)),
    +      capture.capture(),
    +      any(classOf[Filters])
    +    )
    +
    +    assert(capture.getValue.size() == 1)
    --- End diff --
    
    `===`, here and other places


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at [email protected] or file a JIRA ticket
with INFRA.
---

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to