我在IntelliJ(Ultimate)中有一个Kotlin JavaScript项目.我希望能够为这个项目编写测试.
我尝试了很多不同的东西,从用Spek编写测试(这将是理想的)到用Karma/Jasmine编写它们.Spek的问题在于我无法使用JavaScript项目.它抱怨一些罐子不是JavaScript库.
Karma/Jasmine的问题在于我无法弄清楚如何让测试运行器从我的Kotlin测试输出中获取测试.当测试是用纯JavaScript编写的时,它们无法访问我的Kotlin对象,因为我不知道如何正确引用它们,以及在进行Kotlin到JavaScript编译时发生的所有名称修改.
我现在对任何事情都持开放态度,因为这是一个Angular项目,我可能想知道如何使用Protractor进行端到端测试,不过我真的更喜欢一些单元测试覆盖.
我有一个用 TypeScript 编写的依赖项。依赖项包括 NPM 包中的源映射和原始源。如果我在代码中设置断点,然后单步执行依赖项,它会正确单步执行 TypeScript,而不是编译后的 JavaScript。但是,如果我在 TypeScript 代码中设置断点,然后启动我的应用程序,VSCode 会说
断点被忽略,因为未找到生成的代码(源映射问题?)。
如果我在进入依赖项后设置断点,一切都会正常。
我认为这里的问题是源映射是单向的,所以当我在 TypeScript 源文件中设置断点时,它不知道它在 JavaScript 中的位置(需要通过节点调试器实际设置断点)。一旦 JavaScript 文件打开,VSCode 就能够匹配两个 up and now 断点工作。
所以问题是,如何才能使我的 TS 断点从启动时就起作用,而不必首先单步进入文件?依赖关系是许多文件,并且每次运行都必须重置断点是有问题的,特别是因为我正在调试的特定问题如果花费太长时间(超过几秒)就会遇到套接字连接超时。
我想要的是一种方法来告诉 TypeScript,“在启动调试器时解析这些 JavaScript 文件并同步源映射,以便断点正确匹配”。
我知道一般功能是可用的,因为我可以通过 TypeScript 文件中的断点成功调试依赖项本身(我是依赖项的维护者)。只是当它作为 NPM 模块加载时,似乎丢失了一些信息。
source-maps typescript node-debugger visual-studio-code typescript2.0
我正在尝试使用Azure WebJob SDK,但我无法找到任何文档,因此我可以知道会发生什么,而不必通过测试来捅它.
我确实找到了这个:http://azure.microsoft.com/en-us/documentation/articles/websites-webjobs-resources/但它更多的是教程而不是文档.他们向我介绍了SDK的基本用法,但他们没有详细介绍非快乐路径的情况.
我还发现https://github.com/Azure/azure-webjobs-sdk-samples有一些不愉快的路径,但那里的服务总线信息非常少.
如果没有强大的文档,如果源代码可用(除了通过反射),那将是很好的.然后我可以挖一点,找到我的问题的答案.目前,我发现回答任何问题的唯一方法是编写一些测试但很快就会变得单调乏味.
在上述链接中我无法找到答案的一些问题示例(尽管我可能已经错过了它):
如果我有一个带[ServiceBusTrigger("my-queue")] String
参数的方法,那么它是PeekLock还是ReceiveAndDelete?
怎么样[ServiceBusTrigger("my-queue")] BrokeredMessage?
如果它是PeekLock,那么在函数成功执行(没有例外)时会发生什么?它是否在消息上调用Complete或我是否需要手动调用?
如果我有一个[ServiceBusTrigger("my-queue")]
BrokeredMessage而不是一个,行为会改变[ServiceBusTrigger("my-queue")]
String吗?
如果我的处理方法抛出异常会发生什么?它是否会在消息上调用Abandon?
如果我的处理功能需要比PeekLock超时更长的时间,是否会自动更新锁定,还是我必须手动执行此操作?
除String和BrokeredMessage之外,还有其他可用于ServiceBusTriggers的自动反序列化吗?
是否可以将反序列化器连接到ServiceBusTrigger参数?例如,如果我的消息是protobuf格式,我可以教它关于它的WebJob SDK,以便它可以为我反序列化或者我必须作为BrokeredMessage接收它并手动反序列化吗?
我有一项服务,该服务以我控制的速率消耗队列外的消息。我进行了一些处理,然后尝试通过Datastax Java客户端写入Cassandra集群。我已经使用maxRequestsPerConnection和设置了我的Cassandra集群maxConnectionsPerHost。但是,在测试中,我发现当我到达maxConnectionsPerHost并maxRequestsPerConnection致电到session.executeAsync不会阻塞。
我现在正在做的是使用a new Semaphore(maxConnectionsPerHost * maxRequestsPerConnection),并在每个异步请求之前将其递增,并在将来返回的executeAsync结束时递减。这足够好,但是由于驱动程序已经在内部跟踪请求和连接,因此显得多余。
有没有人为这个问题提出更好的解决方案?
一个警告:我希望在请求完成之前将其视为未完成的请求。这包括重试!我从群集中获取重试失败的情况(例如等待一致性的超时)是主要的情况,我想对此施加压力并停止使用队列中的消息。
问题:
// the rate at which I consume messages depends on how fast this method returns
processMessage(message) {
// this appears to return immediately even if I have exhausted connections/requests
session.executeAsync(preparedStatement.bind(...));
}
Run Code Online (Sandbox Code Playgroud)
当前解决方案:
constructor() {
this.concurrentRequestsSemaphore = new Semaphore(maxConnectionsPerHost * maxRequestsPerConnection);
}
processMessage(message) {
ResultSetFuture resultSetFuture = session.executeAsync(preparedStatement.bind(...));
CompletableFuture<ResultSet> future = completableFromListenable(resultSetFuture);
concurrentRequestsSemaphore.acquireUninterruptibly();
future.whenComplete((result, exception) -> …Run Code Online (Sandbox Code Playgroud) Visual Studio 2012未实现用于线程安全静态初始化的C++ 11标准(http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2660.htm).我有一个函数本地静态,我需要保证将以线程安全的方式初始化.以下在Visual Studio 2012中不是线程安全的:
struct MyClass
{
int a;
MyClass()
{
std::this_thread::sleep_for(std::chrono::milliseconds(100));
a = 5;
}
};
void foo()
{
static MyClass instance;
std::cout << instance.a << '\n';
}
int main()
{
std::thread a(foo);
std::thread b(foo);
a.join();
b.join();
system("pause");
}
Run Code Online (Sandbox Code Playgroud)
Visual Studio 2012上的上述程序的输出很可能是:
0
5
Run Code Online (Sandbox Code Playgroud)
我需要解决这个问题,我试图找到一种方法,只使用函数本地静态(没有全局或类级静态).
我最初的想法是使用互斥锁,但它遇到了静态初始化线程安全的相同问题.如果我在foo中有一个静态的st :: mutex,那么第二个线程可能会在它处于无效状态时获得互斥锁的副本.
另一个选择是添加一个std :: atomic_flag自旋锁.问题是,Visual Studio 2012中的std :: atomic_flag初始化线程安全吗?
void foo()
{
// is this line thread safe?
static std::atomic_flag lock = ATOMIC_FLAG_INIT;
// spin lock before …Run Code Online (Sandbox Code Playgroud) 我有一个在Azure WebSites上运行的WebAPI应用程序.它在基本模式下运行,我可以选择使其"始终开启".网上似乎有关于这意味着什么的相互矛盾的信息.我知道效果,但"如何"在这里很重要.特别是,有些东西会定期自动命中我的应用程序中的端点吗?如果是这样,我可以控制它命中的端点吗?
正如我所提到的,它是一个Web API应用程序,默认路由执行非常重要的工作,并导致大量的出站流量,并且还会导致项目被放置到最终将被处理的工作队列中.我希望应用程序始终打开(没有冷启动时间),但我不想要一些服务请求应用程序.
我有一个简单的 Azure WebJobs ServiceBusTrigger,看起来像
public static async void ProcessQueueMessage([ServiceBusTrigger("myqueuename")] String json, TextWriter log) { ... }
Run Code Online (Sandbox Code Playgroud)
不幸的是,它无法将 JSON 反序列化为 XML(不足为奇)。我检查了有效负载并确认它只是一个 UTF-8 编码的字节数组。我有两个问题。
堆栈跟踪:
System.InvalidOperationException: Exception binding parameter 'json' ---> System.Runtime.Serialization.SerializationException: There was an error deserializing the object of type System.String. The input source is not correctly formatted. ---> System.Xml.XmlException: The input source is not correctly formatted.
at System.Xml.XmlExceptionHelper.ThrowXmlException(XmlDictionaryReader reader, String res, String arg1, String arg2, String arg3)
at System.Xml.XmlBufferReader.ReadValue(XmlBinaryNodeType nodeType, ValueHandle value)
at System.Xml.XmlBinaryReader.ReadNode() …Run Code Online (Sandbox Code Playgroud) 我通常在 Docker 容器内工作,既保持本地环境清洁,又沙箱。但是,当我使用 VSCode 远程容器尝试打开容器中的文件夹时,我被告知:
打开开发容器中的文件夹可能会在容器内部和外部执行任意代码。
不幸的是,文档链接仅总体讨论了工作区信任,而没有提及任何有关容器的风险。
在开发容器中工作时,单击“信任文件夹并继续”会带来哪些具体风险? 通过单击此处的“信任”,我会面临哪些攻击媒介?除了在容器内部工作之外,我可以在 VSCode 中做些什么来减轻风险(例如,我可以禁用某些特定功能)吗?
我创建了以下程序:
using System;
using Microsoft.Azure.WebJobs;
namespace StayUpdated.Cpe.PypyFilter
{
public class Program
{
public static void Main()
{
var jobHost = new JobHost();
jobHost.RunAndBlock();
}
public static void ProcessQueue([ServiceBusTrigger("start")] String input)
{
}
}
}
Run Code Online (Sandbox Code Playgroud)
在app.config中我添加以下连接字符串:
<add name="AzureWebJobsDashboard" connectionString="DefaultEndpointsProtocol=https;AccountName=cpepypywebjobstorage;AccountKey=2iCufOrnXeY/B/VJptegGXaAbEmoj1SOgiiAbunk1kDAPqhkgvcOj3NEVGqtm0363GHu/h6Fy8JfoWEpKCP2Rw==" />
<add name="AzureWebJobsStorage" connectionString="DefaultEndpointsProtocol=https;AccountName=cpepypywebjobstorage;AccountKey=2iCufOrnXeY/B/VJptegGXaAbEmoj1SOgiiAbunk1kDAPqhkgvcOj3NEVGqtm0363GHu/h6Fy8JfoWEpKCP2Rw==" />
Run Code Online (Sandbox Code Playgroud)
我收到一条FunctionIndexingException带有消息的异常Error indexing method 'ProcessQueue'.
azure ×2
backpressure ×1
c# ×1
c++ ×1
c++11 ×1
cassandra ×1
java ×1
kotlin ×1
source-maps ×1
typescript ×1